Pergunta

Roll with me e imaginar o seguinte exemplo:

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

Isto deve ser feito melhor como assim

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

Eu tentei ModelBinding adequada antes, mas eu não poderia fazê-lo funcionar corretamente. Todos os exemplos mostram como ele funciona com um tipo extremamente simples, não com vários, tipos complexos. Como é que o know ModelBinder o campo é para que tipo? E se há uma fruit1 e uma fruit2? Como é que o aglutinante saber que tipo concreto para usar para minha interface IFruit? Além disso eu me pergunto como ele iria trabalhar se eu quero dar um frutas IEnumerable à minha pessoa.

Foi útil?

Solução

Eu acredito que ele deve ir como este:

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

Para coleções:

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

Como em esta pergunta .

scroll top