2009-03-13 8 views
4

次のタイプがある場合。MVC UpdateModel ComplexType

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public List<TheParameters> Parameters { get; set; } 
    public Address Address { get; set; } 
} 
public class Address 
{ 
    public string Street { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
} 
public class TheParameters 
{ 
    public string Parameter { get; set; } 
} 

あなたのページをPersonに厳密にタイピングしました。私はのUpdateModel呼び出す

public ActionResult Index() 
    { 
     Person p = new Person(); 
     p.FirstName = "Name"; 
     p.LastName = "Last"; 
     p.Address = new Address(); 
     p.Address.City = "city"; 
     p.Address.State = "state"; 
     p.Address.Street = "street"; 

     p.Parameters = new List<TheParameters>(); 
     p.Parameters.Add(new TheParameters(){ Parameter = "P1" }); 
     p.Parameters.Add(new TheParameters(){ Parameter = "p2" }); 

     ViewData.Model = p; 

     return View(); 
    } 

    public ActionResult Save(FormCollection form) 
    { 
     Person p = new Person(); 


     UpdateModel(p, "Person", form.ToValueProvider()); 

     return RedirectToAction("Index"); 

    } 

:コントローラ以下で

"System.Web.Mvc.ViewPage<Person>" 

<form action="/Home/Save" method="post"> 

    <b>Your Name</b> 
    <label for="FirstName"> 
     <span>First Name</span> 
     <%=Html.TextBox("Person.FirstName", ViewData.Model.FirstName) %> 
    </label> 

    <label for="LastName"> 
     <span>Last Name</span> 
     <%=Html.TextBox("Person.LastName", ViewData.Model.LastName)%> 
    </label> 

    <b>Your Address</b> 

    <label for="Street"> 
     <span>Street</span> 
     <%=Html.TextBox("Person.Address.Street", ViewData.Model.Address.Street)%> 
    </label> 

    <label for="City"> 
     <span>City</span> 
     <%=Html.TextBox("Person.Address.City", ViewData.Model.Address.City)%> 
    </label> 

    <label for="State"> 
     <span>State</span> 
     <%=Html.TextBox("Person.Address.State", ViewData.Model.Address.State)%> 
    </label> 

    <label for="Parameters"> 
     <span>Parameters</span> 
     <% 
      int index = 0; 
      foreach (TheParameters parameter in ViewData.Model.Parameters) 
      { 
       Response.Write(Html.TextBox("Person.Parameters.Parameter[" + index + "]", parameter.Parameter)); 
       index++; 
      } 
     %> 
    </label> 

    <input id="submit" type="submit" value="submit" /> 

</form> 

。 Person.Parametersを除いて、すべてのプロパティが正しく埋められます。これはupdateModelの後で常にnullです。

解決策はありますか?

に関して、あなたのビューで スティーブ

+0

このUPDATEMODEL作品でなければなりません。 aspxページにリストを索引付けする際に障害がありました。 –

答えて

0

"Person.Parameters.Parameter[" + index + "]" 

"Person.Parameters[" + index + "].Parameter" 
関連する問題