我的 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 的评论,我做了以下编辑:
管理员控制器.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
新用户.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 的编辑,并且我已经将 Form 元素更改为 DB 字段名称(至少用于测试)。现在,当页面提交时,姓名、登录名和电子邮件都已填写,密码为空(我假设这是密码框的预期行为),但我仍然收到“值''无效”错误。