Quelqu'un peut-il expliquer pourquoi l'objet modèle est null. J'ai vérifié les valeurs de poteau traversant le fil et tous sont remplis. En utilisant VS2010 Beta 2, WinXp SP2, mais cela fonctionne dans VS2008 ?? !!Erreur lors de la publication des données d'édition dans ASP.NET MVC
écran jaune du message mort
Server Error in '/' Application. Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 17: <p> Line 18: <label for="id">id:</label> Line 19: <%= Html.TextBox("id", Model.id) %> <--Error Line 20: <%= Html.ValidationMessage("id", "*") %> Line 21: </p>
code contrôleur
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Contact contactToEdit)
{
if (contactToEdit.FirstName.Trim().Length == 0)
ModelState.AddModelError("FirstName", "First name is required.");
if (contactToEdit.Lastname.Trim().Length == 0)
ModelState.AddModelError("LastName", "Last name is required.");
if (contactToEdit.Phone.Length > 0 && !Regex.IsMatch(contactToEdit.Phone, @"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}"))
ModelState.AddModelError("Phone", "Invalid phone number.");
if (contactToEdit.Email.Length > 0 && !Regex.IsMatch(contactToEdit.Email, @"^[\w-\.][email protected]([\w-]+\.)+[\w-]{2,4}$"))
ModelState.AddModelError("Email", "Invalid email address.");
if (!ModelState.IsValid)
return View();
try
{
// TODO: Add update logic here
var con = (from c in _entities.Contacts
where c.id == contactToEdit.id
select c).FirstOrDefault();
_entities.ApplyCurrentValues(con.EntityKey.EntitySetName, contactToEdit);
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Snippet de vue Code
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<JQGallery.Models.Contact>" %>
...
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="id">id:</label>
<%= Html.TextBox("id", Model.id) %>
<%= Html.ValidationMessage("id", "*") %>
</p>
<p>
<label for="FirstName">FirstName:</label>
<%= Html.TextBox("FirstName", Model.FirstName) %>
<%= Html.ValidationMessage("FirstName", "*") %>
</p>
<p>
...
Cela n'est pas vrai, en fait, à cause de la liaison de modèle. Vérifiez ici pour plus d'informations: http://www.asp.net/learn/mvc/tutorial-36-cs.aspx –
La liaison de modèle instancie et définit les propriétés de l'argument contactToEdit dans la méthode Edit de l'OP en utilisant les valeurs de formulaire soumises. Il n'instancie pas et ne remplit pas l'objet Model disponible pour sa vue. (Les exemples de votre lien de didacticiel fonctionnent uniquement avec la méthode View() car cet exemple particulier n'essaie pas d'accéder à l'objet Model.) –
En fait, je vous ai envoyé un lien vers l'action Créer uniquement, mais la modification fonctionnera dans de la même manière: http://www.asp.net/%28S%28pdfrohu0ajmwt445fanvj2r3%29%29/learn/mvc/tutorial-28-cs.aspx - L'idée est que depuis que le modèle a été POSTé à l'action , la liaison du modèle le repousse vers le navigateur lorsque l'action revient simplement à la vue. –