2009-05-21 9 views
0

私は、次のアクションを持っている:ASp.NET MVC:TryUpdateModelは、すべてのプロパティを更新しません

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

何が起こることは財産「Person.Nameは」TryUpdateModelによって満たされないということです。

これは私のフォームです:

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

なぜこれが起こっている上の任意の考え?

答えて

0

はこれを試してみてください ありがとう:Person.Nameを埋めるために

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

:(おかげでうまくいかなかったという。 –

0

は、モデルバインダーは、新しい人を作成する必要があります。モデルバインダーに十分な情報を与えてくれましたか?代わりに、バインドする前にPersonを自分で作成してみてください。

+0

何奇妙であること(公共のActionResultが(Employeeエンティティ)を作成します)私が代わりのアクションパラメータとしてEmployeeクラスを使用tryupdatemodeを使用している場合、ということですそれは正しくバインドPerson.Nameが入力されています。 –

4

PersonオブジェクトがEmployeeコンストラクタで初期化されていることを確認してください。それが最初にnullであれば、おそらく正しく更新されません。残念ながら

public Employee() 
{ 
    Person = new Person(); 
} 
関連する問題