2009-05-21 57 views
0

J'ai l'action suivante:ASp.NET MVC: TryUpdateModel ne met pas à jour toutes les propriétés

public ActionResult Create() 
{ 
    var entity = new Employee(); 
    TryUpdateModel(entity, new[] { "Person.Name", "Code", "CompanyID" }); 
    if (ModelState.IsValid) 
    { 
     var result = Service.MergeEmployee(entity); 
     return RedirectToAction("List", new { success = true }); 
    } 
    return View("Edit", new SupplierEmployeeModel() { Employee = entity }); 
} 

Ce qui se passe est que la propriété « Person.Name » ne soit pas rempli par le TryUpdateModel.

C'est ma forme:

<fieldset> 
    <p> 
     <label for="Name"><%=Strings.NAME %></label> 
     <%= Html.TextBox("Person.Name", Model.Employee.Person.Name, new { Class = "text" })%> 
     <%= Html.ValidationMessage("Name", "*") %> 
    </p> 
    <p> 
     <label for="CompanyID"><%=Strings.SUPPLIER %></label> 
     <%= Html.DropDownList("CompanyID") %> 
     <%= Html.ValidationMessage("CompanyID", "*")%> 
    </p> 
    <p> 
     <label for="Code"><%=Strings.CODE %></label> 
     <%= Html.TextBox("Code", Model.Employee.Code)%> 
     <%= Html.ValidationMessage("Code", "*") %> 
    </p> 
    <p> 
     <%= Html.Hidden("ID", Model.Employee.ID)%> 
    </p> 
    <div id="tabs-DE-actions" class="ui-dialog-buttonpane ui-helper-clearfix" style="display: block;"> 
     <button class="ui-state-default ui-corner-all" type="submit"><%=Strings.SAVE%></button> 
    </div> 
</fieldset> 

Toute réflexion sur les raisons de ce qui se passe? Merci

Répondre

0

Essayez ceci:

TryUpdateModel(entity,"Person", new[] { "Name", "Code", "CompanyID" }); 
+0

Malheureusement, cela ne fonctionne pas :(Merci. –

0

Afin de remplir Person.Name, le liant modèle doit créer une nouvelle personne. Avez-vous donné au classeur suffisamment d'informations pour le faire? Alternativement, essayez de créer la personne vous-même avant de vous lier.

+0

Ce qui est étrange est que, si je au lieu d'utiliser la tryupdatemode utiliser la classe des employés comme paramètre d'action (ActionResult public Créer (entité Employee)) il se fixe correctement , avec la Person.Name remplie. –

4

Assurez-vous que l'objet Person est initialisé dans le constructeur Employee; si c'est null pour commencer, il n'est probablement pas mis à jour correctement.

public Employee() 
{ 
    Person = new Person(); 
}