2009-05-21 11 views
0

ich die folgende Aktion haben:ASp.NET MVC: TryUpdateModel aktualisiert nicht alle Eigenschaften

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 }); 
} 

Was passiert, ist, dass die Eigenschaft „Person.Name“ nicht von der TryUpdateModel gefüllt werden.

Das ist meine Form:

<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> 

Irgendwelche Gedanken darüber, warum dies geschieht? Dank

Antwort

0

Try this:

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

Leider, das nicht :(Dank funktionierte. –

0

Um in Person.Name zu füllen, das Modell Binder hat eine neue Person zu erstellen. Haben Sie dem Modellbinder genügend Informationen gegeben, um das zu tun? Versuchen Sie alternativ, die Person vor dem Binden selbst zu erstellen.

+0

Was seltsam ist, dass, wenn ich stattdessen die tryupdatemode die Klasse Employee als Aktionsparameter (public Action (Employee-Entität erstellen)) verwenden, verwenden sie bindet richtig , mit der Person.Name gefüllt. –

4

Stellen Sie sicher, dass das Person-Objekt im Employee-Konstruktor initialisiert wird; Wenn es zu Beginn Null ist, wird es wahrscheinlich nicht richtig aktualisiert.

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