Mais complexo ModelBinding (na vida real)?
-
18-09-2019 - |
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.
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 ??a >.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow