lors de la création d'une nouvelle vue et en sélectionnant Modifier le modèle, le modèle crée une zone de texte pour la clé primaire qui n'est pas modifiable.ASP.Net MVC Simple Modifier les données du modèle par défaut
<%=Html.TextBox("CompanyID", Model.CompanyID)%>
Ainsi, la suppression du contrôle de la vue, provoquera le problème: la collection qui est la poste à contrôleur a la CompanyID = 0, donc pas modifier sera fait. Mais si je remets cette ligne de code à afficher, le CompanyID dans la collection affichée a la bonne valeur. Je fais beaucoup comme ce tutoriel: http://www.asp.net/learn/mvc/tutorial-21-vb.aspx, et là (boîte grise au-dessus de la "Liste 6 - Contrôleurs \ HomeController.vb (Modifier les méthodes)" section), il est dit que vous pouvez supprimer le contrôle, mais son ne fonctionne pas. ?
Mise à jour Ok, pour plus d'expliquer, va ici 2 problèmes:
problème 1 dans ce code:
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal movieToEdit As Movie) As ActionResult
si vous supprimez la zone de texte MovieID de vue le MovieID dans movietoedit La collection est toujours nulle, donc le tutoriel du site asp.net ne fonctionnera pas! si je veux supprimer le MovieID de la vue, je dois passer l'ID à mon contrôleur comme ceci:
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal ID as integer,ByVal movieToEdit As Movie) As ActionResult
maintenant je peux interroger modèle en utilisant cet ID .. des thats pas de problème, mais il me faut un certain temps pour comprendre, comme je faisais pas à pas du site!
Problème 2 Alors, Comment faire pour éditer sans utiliser le movieID dans la vue, même dans la zone de texte cachée?
Je me sers de ce que mon contrôleur: (en utilisant le framework Enity)
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal id As Integer, ByVal collection As Company) As ActionResult
If Not ModelState.IsValid Then
Return View()
End If
Try
Dim c = _db.CompanySet.FirstOrDefault(Function(m) m.CompanyID = id)
If c Is Nothing Then
Return RedirectToAction("index")
End If
_db.ApplyPropertyChanges(c.EntityKey.EntitySetName, collection)
_db.SaveChanges()
Return RedirectToAction("Index")
Catch ex As Exception
Throw ex
End Try
End Function
Et si je retire de mon point de vue CompanyID (ou zone de texte champ caché), il me donnera cette erreur de c.EntityKey.EntitySetName:
ObjectStateManager ne contient pas ObjectStateEntry avec une référence à un objet de type "Companies.Company".
et si j'ajouter quelque chose comme
<%= Html.TextBox("CompanyName", Model.CompanyName) %>
cela fonctionnera très bien .. Je suis confus!
Note: J'ai vérifié le code plus de 10 fois, et je me demande s'il y a quelque chose que je fais mal ou le tutoriel est faux ..
s'il vous plaît voir la question, il est mis à jour – mohamadreza