我在我的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