2009-03-13 7 views
4

Si vous avez le type suivant.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; } 
} 

Vous rendez votre page fortement typée à Personne.

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

Dans le contrôleur les éléments suivants:

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

    } 

j'appelle le UpdateModel. Toutes les propriétés sont remplies correctement à l'exception des Person.Parameters. Ceci est toujours nul après le updateModel.

Existe-t-il une solution pour cela ou une solution de contournement?

salutations, Steve

+0

Ce updateModel fonctionne. Il y avait une erreur dans ma page aspx pour l'indexation de la liste. –

Répondre

0

À votre avis:

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

doivent être

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