Question

rouleau avec moi et imaginez l'exemple suivant:

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

Cela devrait être fait mieux comme si

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

J'ai essayé modelbinding plus tôt, mais bon je ne pouvais pas le faire fonctionner correctement. Tous les exemples montrent comment il fonctionne avec un type extrêmement simple, jamais avec de multiples types complexes. Comment le ModelBinder savoir ce champ est pour quel type? Que faire s'il y a un fruit1 et un fruit2? Comment le liant connaîtrait ce type concret à utiliser pour mon interface IFruit? De plus, je me demande comment cela fonctionnerait si je veux donner un IEnumerable fruits à ma personne.

Était-ce utile?

La solution

Je crois qu'il devrait se présenter comme suit:

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

Pour les collections:

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

Comme dans cette question .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top