我在我的MVC应用程序中有一个表单,理论上应该使用存储库类将数据提交回我的数据库。表单没有提交,并没有与MVC产生错误
然而,当我提交表单(http://localhost:1028/Admin/NewUser/),该URL变化到形式应该被提交到,这是很好的(http://localhost:1028/Admin/NewUser/Submit),但一旦被提交,就应该向用户发送到确认页面。
从我所知道的情况来看,我正确地浏览了我的所有页面,直到它提交,它再次显示表单,但在/Admin/NewUser/Submit之后,数据未插入到数据库。
这是我使用的ActionResult:
Public Function Submit() As ActionResult
Try
Dim user = New hdUser() With { _
.userLogon = Request.Form("UserLogin"), _
.userPass = Request.Form("UserPassword"), _
.userEmail = Request.Form("UserEmail"), _
.RealName = Request.Form("UserFullName"), _
.isLive = 1, _
.avatar = "noavatar.gif" _
}
userRepository.Add(user)
userRepository.Save()
Return Redirect("/Admin/NewUser/Confirm")
Catch ex As Exception
ModelState.AddModelError("Error", ex)
End Try
Return View()
End Function
我是相当新的MVC所以我不能完全肯定,如果上面的正确与否。
在我的数据仓库类UserRepository.vb,我使用这两个功能是:
Public Sub Add(ByVal user As hdUser) Implements IUserRepository.Add
db.hdUsers.InsertOnSubmit(user)
End Sub
和
Public Sub Save() Implements IUserRepository.Save
db.SubmitChanges()
End Sub
我创建的形式是:
<form action="/Admin/NewUser/Submit" method="post">
<table border="0" cellpadding="0" cellspacing="2">
<tr>
<td><strong>User's Full Name</strong> <br />
<%=Html.TextBox("UserFullName")%>
</td>
</tr>
<tr>
<td><strong>User Login</strong> <br />
<%=Html.TextBox("UserLogin")%>
</td>
</tr>
<tr>
<td><strong>Password</strong> <br />
<%=Html.Password("UserPassword")%>
</td>
</tr>
<tr>
<td><strong>Email Address</strong> <br />
<%=Html.TextBox("UserEmail")%>
</td>
</tr>
<tr>
<td align="right"><input type="submit" value="Create" /></td>
</tr>
</table>
</form>
该代码不会产生任何错误,但也似乎没有提交给数据库。所以我不完全确定我出错的地方。
这对一个更有经验的人来说可能是显而易见的,但我真的对这一个毫无头绪。
这是我的代码,这是导致问题或一些其他错误?
在此先感谢您的帮助。
编辑:基于Zhaph本 - 杜吉德评论,我已经做了如下修改:
AdminController.vb
<AcceptVerbs(HttpVerbs.Post)> _
Public Function NewUser(ByVal formValues As FormCollection) As ActionResult
Try
Dim user = New hdUser()
user.userLogon = Request.Form("UserLogin")
user.userPass = Request.Form("UserPassword")
user.userEmail = Request.Form("UserEmail")
user.RealName = Request.Form("UserFullName")
user.isLive = 1
user.avatar = "noavatar.gif"
UpdateModel(user)
userRepository.Add(user)
userRepository.Save()
Catch ex As Exception
ModelState.AddModelError("Error", ex)
End Try
Return View()
End Function
NewUser.aspx
<%Html.BeginForm()%>
<%=Html.ValidationMessage("Error")%>
<table border="0" cellpadding="0" cellspacing="2">
<tr>
<td><strong>User's Full Name</strong> <br />
<%=Html.TextBox("UserFullName")%>
<%=Html.ValidationMessage("Name", "*")%></td>
</tr>
<tr>
<td><strong>User Login</strong> <br />
<%=Html.TextBox("UserLogin")%>
<%=Html.ValidationMessage("Username", "*")%></td>
</tr>
<tr>
<td><strong>Password</strong> <br />
<%=Html.Password("UserPassword")%>
<%=Html.ValidationMessage("Password", "*")%></td>
</tr>
<tr>
<td><strong>Email Address</strong> <br />
<%=Html.TextBox("UserEmail")%>
<%=Html.ValidationMessage("Email", "*")%></td>
</tr>
<tr>
<td align="right"><input type="submit" value="Create" /></td>
</tr>
</table>
<% Html.EndForm() %>
现在产生一个错误值''是无效的。对我来说。
这是否意味着表单值没有正确传递给控制器?
编辑:我做了回应Zhaph这些编辑本 - 杜吉德的编辑和我已经改变了表单元素数据库字段名(用于测试至少)。现在,当页面提交时,名称,登录和电子邮件全部填满,密码为空(我假设预期的行为为每个密码框)但我仍然收到“该值'无效”错误。
你从哪里得到的错误?你能发布堆栈跟踪吗? – 2009-09-25 15:35:52
由于我不在办公室,现在不会在星期一。 – LiamGu 2009-09-25 17:22:38
没问题,我会保留;) – 2009-09-25 20:13:21