Je construis une application Asp.net MVC 2.Remplissage de propriétés sur mon modèle avec des valeurs d'une liste SelectList lorsque je poste
J'ai une entité appelée Team qui est mappée via les propriétés publiques à deux autres entités appelées Gender et Grade.
public class Team
{
public virtual int Id { get; private set; }
public virtual string CoachesName { get; set; }
public virtual string PrimaryPhone { get; set; }
public virtual string SecondaryPhone { get; set; }
public virtual string EmailAddress { get; set; }
public virtual Grade Grade { get; set; }
public virtual Gender Gender { get; set; }
}
J'ai un ViewModel qui ressemble à ceci.
public class TeamFormViewModel
{
public TeamFormViewModel()
{
Team = new Team();
Grade = new SelectList((new Repository<Grade>()).GetList(),"ID", "Name",Team.Grade);
Gender = new SelectList((new Repository<Gender>()).GetList(), "ID", "Name", Team.Gender);
}
public Team Team { get; set; }
public virtual SelectList Grade { get; set; }
public virtual SelectList Gender { get; set; }
}
Ma forme est conforme à mes attentes. Lorsque je débogue la méthode Create, je vois que les propriétés Gender et Grade sont NULL sur mon objet Team.
[HttpPost, Authorize]
public ActionResult Create(Team team)
{
try
{
if (ModelState.IsValid)
{
(new Repository<Team>()).Save(team);
}
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Qu'est-ce que je fais mal?
Merci, Eric
Cela fait beaucoup de sens pour moi. Je vais essayer cet essai dans un petit moment. –
Cela a très bien fonctionné merci. Est-ce une pratique courante de mettre la logique requise dans les ViewModels? C'était une chose que je n'avais pas encore lue. –
Non. Ce n'est certainement pas une pratique courante. J'ai essayé de coller un peu à votre original, mais en réalité, je refactoriserais les appels au référentiel dans le constructeur du modèle de vue. Je demanderais probablement au contrôleur d'appeler le référentiel pour obtenir les listes, à partir de la base de données ou du cache, et de les transmettre dans le constructeur. C'est une bonne idée de faire en sorte que vos modèles de vue ne sachent rien de votre backend et de leur laisser simplement le travail de fournir votre vue avec les données requises pour rendre l'interface utilisateur. –