J'ai un formulaire dans mon application MVC qui en théorie devrait soumettre des données à ma base de données en utilisant une classe Repository.Formulaire ne pas soumettre et aucune erreur n'est produite avec MVC
Cependant, lorsque je soumets la forme (http://localhost:1028/Admin/NewUser/), l'URL change à l'endroit où le formulaire doit être soumet, ce qui est bien (http://localhost:1028/Admin/NewUser/Submit), mais une fois qu'il a été soumis, il devrait envoyer à l'utilisateur à une page de confirmation. D'après ce que je peux dire, je suis en train de parcourir toutes mes pages correctement jusqu'à ce qu'il arrive à la soumission, où il affiche à nouveau le formulaire mais sous /Admin/NewUser/Submit et les données ne sont pas insérées dans le base de données.
C'est le ActionResult J'utilise:
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
Je suis assez nouveau pour MVC donc je ne suis pas tout à fait sûr que ce qui précède est correcte ou non.
Et dans mon dépôt de données de classe UserRepository.vb, les deux fonctions que je utilise sont:
Public Sub Add(ByVal user As hdUser) Implements IUserRepository.Add
db.hdUsers.InsertOnSubmit(user)
End Sub
et
Public Sub Save() Implements IUserRepository.Save
db.SubmitChanges()
End Sub
Et la forme que j'ai créé est:
<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>
Le code ne produit aucune erreur mais ne semble pas non plus être soumis à la base de données. Donc, je ne suis pas tout à fait sûr où je me suis trompé.
Cela pourrait être évident pour quelqu'un plus expérimenté, mais je n'ai vraiment aucune idée sur celui-ci.
Est-ce mon code qui cause le problème ou un autre défaut?
Merci d'avance pour toute aide.
EDIT: Basé sur Zhaph - Ben Duguid commentaire, je l'ai fait les modifications suivantes:
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() %>
Ce qui produit maintenant une erreur de La valeur '' est invalide. pour moi. Cela signifie-t-il que les valeurs de formulaire ne sont pas transmises correctement au contrôleur?
EDIT: Je ai fait ces modifications en réponse Zhaph - edit Ben Duguid et j'ai changé les éléments de formulaire pour les noms de champs DB (pour les tests au moins). Et maintenant, lorsque la page est soumise Nom, Login et Email sont tous remplis, mot de passe est vide (ce que je suppose est attendu comportement par les boîtes de mot de passe) mais je reçois toujours le "La valeur" est invalide " erreur .
Où allez-vous obtenir l'erreur de? Pourriez-vous poster une trace de pile? –
Ce ne sera pas jusqu'à lundi maintenant que je ne suis plus au bureau. – LiamGu
Pas de problème, je vais garder;) –