2009-04-28 23 views
3

Roll mit mir und stellen Sie sich das folgende Beispiel:Komplexere (reale) Modellbindung?

Public ViewResult GiveMeFruit(int personId, string personName, int personAge, int fruitId){ 
    Person person = PersonService.GetPerson(personId); 
    person.Name = personName; 
    person.Age = age; 
    person.Fruits.Add(FruitService.GetFruit(fruitId)); 
    ViewData.Person = person; 
    View(ViewData); 
} 

Dies sollte wie

Public ViewResult GiveMeFruit(Person person, IFruit fruit){ 
    person.Fruits.Add(fruit); 
    ViewData.Person = person; 
    View(ViewData); 
} 

so besser gemacht werden ich die richtige modelbinding früher versucht, aber ich konnte es nicht richtig zu arbeiten. Alle Beispiele zeigen Ihnen, wie es mit einem extrem einfachen Typ funktioniert, niemals mit mehreren, komplexen Typen. Wie würde der Modelbinder wissen, welches Feld für welchen Typ ist? Was ist, wenn es eine Frucht1 und eine Frucht2 gibt? Wie würde der Ordner wissen, welcher konkrete Typ für meine IFruit-Schnittstelle verwendet wird? Darüber hinaus frage ich mich, wie es funktionieren würde, wenn ich meiner Person zahllose Früchte geben möchte.

+0

Lassen Sie sich nicht, es ist ein dummer Ort, um Camelot gehen. Es ist nur ein Modell .. –

Antwort

3

Ich glaube, es weitergehen sollte:

<input type="text" name="person.Name" value="" /> 
<input type="text" name="person.Age" value="" /> 
<input type="text" name="fruit.Property1" value="" /> 
<input type="text" name="fruit.Property2" value="" /> 

Für Sammlungen:

<input type="text" name="fruit[0].Property1" value="" /> 
<input type="text" name="fruit[0].Property2" value="" /> 
<input type="text" name="fruit[1].Property1" value="" /> 
<input type="text" name="fruit[1].Property2" value="" /> 

Wie in this question.

+0

Wie wäre es mit einem IList ? –

+0

Bitte sehen Sie meine Bearbeitung. –

+0

Shannn't Parameter haben Bind-Präfix in diesem Fall? Oder es ist nur ein weiterer Kongress, den ich verpasst habe? –