7
votes

Ce qui est plus correct: à l'aide de UpdateModel () ou de recevoir un modèle en tant que paramètre?

J'ai vu de nombreux exemples de création d'actions dans des articles, des livres et des exemples. Il semble qu'il y a deux styles répandus.

 [AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Create([Bind(Exclude="Id")]Contact contact)
 {
     try
     {
         contact.Save();  // ... assumes model does validation
         return RedirectToAction("Index");
     }
     catch (Exception ex)
     {
         // ... have to handle model exceptions and populate ModelState errors
         // ... either here or in the model's validation
         return View();
     }
 }


0 commentaires

4 Réponses :


2
votes

Eh bien, après quelques dinking autour, j'ai découvert ce qui aurait dû être évident: transmettre le modèle car le paramètre fait simplement amener le classeur de modèle par défaut à s'habituer dans les coulisses. Comme c'était ma plus grande raison de ne pas utiliser la version fortement typée, alors je suppose qu'il n'y a aucune raison de ne pas maintenant.

En outre, mon code devrait ressembler à ceci: P>

 [AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Create([Bind(Exclude="Id")]Contact contact)
 {
     if(!ModelState.IsValid)
         return View();

     contact.Save();
     return RedirectToAction("Index");
 }


1 commentaires

Problème que vous ne trouverez pas l'utilisation de formulateurs cependant, ce sont des restrictions. Vous n'avez pas de contrôle de grain fine sur ce qui est lié. Voir mon message sur ce goneale.com/2009/07/27/...



0
votes

Il n'y a pas de styles corrects ou incorrects. Si défautModelbinder convient à vos besoins - utilisez toujours une version fortement dactylographiée. Si vous ne pouvez pas utiliser defaultModelBinder - Choisissez entre créer un modèle de modèle personnalisé ou utiliser le paramètre d'action FormCollection .


0 commentaires

3
votes

Utiliser updateModel Lorsque vous souhaitez mettre à jour un objet de modèle déjà présent, vous pouvez obtenir à partir de la base de données ou que vous souhaitez instancier l'objet de modèle de manière spécifique

par exemple: xxx

si vous n'avez pas les exigences ci-dessus, mettez-le comme paramètre d'action.


0 commentaires

1
votes

Vous devez toujours accepter le modèle en tant que paramètre d'action, car il rend la méthode davantage testable em>.

C'est extrême em> plus facile à passer dans un objet de modèle de votre Test de l'unité, que de tenter de se moquer de l'ensemble de l'ensemble du httpContext pour fournir des données à ramasser par UpdateModel. p>

même dans le cas où vous souhaitez mettre à jour un modèle d'entité existant, vous devez toujours utiliser ce modèle par Introduction d'un EM> Modèle EM>: P>

[HttpPost]
public ActionResult Edit(int id, EditContactViewModel viewModel)
{
    if (ModelState.IsValid)
    {
        Contact contact = _db.GetContact(id)

        contact.Name = viewModel.Name;

        _db.SaveChanges();

        return RedirectToAction("Index");
    }

    return View(viewModel);
}


0 commentaires