¿Enlace de modelos más complejo (de la vida real)?
-
18-09-2019 - |
Pregunta
Rueda conmigo e imagina el siguiente ejemplo:
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);
}
Esto debería hacerse mejor así.
Public ViewResult GiveMeFruit(Person person, IFruit fruit){
person.Fruits.Add(fruit);
ViewData.Person = person;
View(ViewData);
}
Intenté vincular el modelo correctamente antes pero no pude hacerlo funcionar correctamente.Todos los ejemplos le muestran cómo funciona con un tipo extremadamente simple, nunca con tipos múltiples y complejos.¿Cómo sabría el modelbinder qué campo es para qué tipo?¿Qué pasa si hay una fruta1 y una fruta2?¿Cómo sabría el encuadernador qué tipo concreto usar para mi interfaz IFruit?Además me pregunto cómo funcionaría si quiero darle frutos IEnumerables a mi Persona.
Solución
Creo que debería ser así:
<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 colecciones:
<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 en esta pregunta.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow