Domanda

Rullo con me e immaginare il seguente esempio:

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

Questo dovrebbe essere fatto meglio in questo modo

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

Ho cercato corretta modelbinding prima, ma non ho potuto farlo funzionare correttamente. Tutti gli esempi mostrano come funziona con un tipo estremamente semplice, mai con più, tipi complessi. Come sarebbe il modelbinder sapere quale campo è per quale tipo? Che cosa succede se c'è un fruit1 e un fruit2? Come sarebbe il legante sapere che tipo di cemento da utilizzare per la mia interfaccia IFruit? Inoltre mi chiedo come avrebbe funzionato se voglio dare un frutti IEnumerable alla mia persona.

È stato utile?

Soluzione

Credo che dovrebbe andare in questo modo:

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

Per le collezioni:

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

Come in questa domanda .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top