【发布时间】:2009-09-25 13:20:42
【问题描述】:
我的 MVC 应用程序中有一个表单,理论上应该使用 Repository 类将数据提交回我的数据库。
但是,当我提交表单 (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 - Ben Duguid 的评论,我做了以下编辑:
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 - Ben Duguid 的编辑,并且我已将表单元素更改为数据库字段名称(至少用于测试)。现在,当页面提交时,名称、登录名和电子邮件都已填写,密码为空(我假设这是密码框的预期行为)但我仍然收到 “值''无效” 错误。
【问题讨论】:
-
你从哪里得到错误?你能发布一个堆栈跟踪吗?
-
因为我不在办公室,所以要等到星期一才行。
-
没问题,我会保留;)
标签: asp.net-mvc vb.net form-submit