MVCアプリケーションに、理論的にはリポジトリクラスを使用してデータベースにデータを送信するフォームがあります。
ただし、フォームを送信すると(http:// localhost:1028 / Admin / NewUser /)、URLがフォームの送信先に変更されます。これで問題ありません(http:// localhost:1028 / Admin / NewUser /送信)。ただし、送信後、ユーザーを確認ページに送信する必要があります。
私の知る限り、送信になるまですべてのページを正しく移動しています。送信すると、フォームが再び表示されますが、/ 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で、私が使用している2つの関数は次のとおりです。
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の編集に応じてこれらの編集を行い、Form要素をDBフィールド名に変更しました(少なくともテスト用)。そして今、ページが送信されると、名前、ログイン、および電子メールがすべて入力され、パスワードは空白になります(パスワードボックスに従って予想される動作と想定しています)が、「値''は無効です」というエラーが表示されます。