2009-03-13 4 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; } 
} 

Вы делаете свою страницу максимально персонализированной.

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

В контроллере следующее:

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

    } 

я называю UpdateModel. Все свойства заполняются должным образом, за исключением параметров Person.Parameters. Это всегда значение null после updateModel.

Есть ли решение для этого или обходного пути?

С уважением, Стив

+0

Это UpdateModel работает. Ошибка в моей странице aspx для индексации списка. – 2009-03-16 13:13:10

ответ

0

На ваш взгляд:

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

должен быть

"Person.Parameters[" + index + "].Parameter" 
Смежные вопросы