2011-03-03 2 views
10

Je suis nouveau pour le développement .Net et je suis maintenant en train de suivre le tutoriel de NerdDinner. Je me demandais si quelqu'un d'entre vous serait en mesure de me direViewData et ViewModel dans MVC ASP.NET

Quelle est la différence entre ViewData et ViewModel

(tout ce que je sais est qu'ils sont utilisés pour transmettre une certaine forme de données de contrôleur vue) et peut-être me dire sur quelle situation dois-je utiliser ViewData au lieu de ViewModel et vice versa

Merci d'avance!

Sally

Répondre

7

ViewData:

En bref, utilisez ViewData sous forme de données de support, comme une source de données à un SelectList.

ViewModel:

ASP.NET MVC ViewModel Pattern

Lorsqu'une classe de contrôleur décide de rendre une réponse HTML à un client , il est responsable de passer explicitement au modèle vue tous les les données nécessaires pour rendent la réponse. Voir les modèles ne doit jamais effectuer toutes les données récupération ou de la logique d'application - et devrait plutôt se limiter à ont seulement le code de rendu qui est chassés du modèle/données transmises à par le contrôleur.

[...]

Lorsque vous utilisez [la « ViewModel »] modèle que nous créons fortement typé classes qui sont optimisées pour nos scénarios de vue spécifiques, et qui exposons propriétés pour les valeurs dynamiques /contenu requis par notre vue modèles. Nos classes de contrôleur peuvent puis remplir et passer ces classes optimisées à la vue à notre modèle à utiliser. Cela permet type-sécurité, vérification de la compilation, et l'éditeur intellisense dans la vue modèles.

+0

Merci pour votre réponse, en cas de besoin quelqu'un a besoin d'en savoir plus sur ce sujet J'ai également trouvé une grande entrée de blog concernant ma question http://theminimalistdeveloper.com/2010/08/21/why-when-and- how-to-use-typed-views-et-viewmodel-pattern-in-asp-net-mvc/ –

9

Qu'est-ce que ViewData?

  • objet dictionnaire que vous mettez des données dans, qui devient alors disponible à la vue.

ViewData Exemple

méthode d'action Controller aime:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var featuredProduct = new Product 
     { 
      Name = "Smart Phone", 
      QtyOnHand = 12 
     }; 

     ViewData["FeaturedProduct"] = featuredProduct; 
     return View(); 
    } 
} 

Comment utiliser ViewData sur View?

@{  
    var viewDataProduct = ViewData["FeaturedProduct"] as Product; 
} 
<div> 
    Today's Featured Product is! 
    <h3>@viewDataProduct.Name</h3> 
</div> 

Qu'est-ce qu'un ViewModel?

  • vous permettent de façonner plusieurs entités d'un ou plusieurs modèles de données ou sources en un seul objet
  • optimisé pour la consommation et le rendu par la vue

est comme:

View Model image

Comment utiliser ViewModel avec MVC 3?

Modèle de domaine

public class Product 
    { 
     public Product() { Id = Guid.NewGuid(); Created = DateTime.Now; } 
     public Guid Id { get; set; } 
     public string ProductName { get; set; } 
    } 

ViewModel

public class ProductViewModel 
    { 
     public Guid VmId { get; set; } 

     [Required(ErrorMessage = "required")] 
     public string ProductName { get; set; } 

    } 

action contrôleur Méthode

[HttpGet] 
public ActionResult AddProduct() 
{ 
    //for initialize viewmodel 
    var productViewModel = new ProductViewModel(); 

    //assign values for viewmodel 
    productViewModel.ProductName = "Smart Phone"; 

    //send viewmodel into UI (View) 
    return View("AddProduct", productViewModel); 
} 

Voir - AddProduct.cshtml

@model YourProject.ViewModels.ProductViewModel //set your viewmodel here 

Conclusion

  • En utilisant ViewModel peut transmettre des données fortement typées dans la vue
  • Mais ViewData est Librement Typed.So besoin de jeter des données sur View
  • ViewModel peut être utilisé pour des scénarios complexes tels que la fusion de plusieurs modèles de domaine
  • Mais ViewData peut être utilisé que pour des scénarios simples comme apporter des données pour la liste déroulante
  • ViewModel peut utiliser pour les scénarios de validation basée sur les attributs qui nécessaires pour Ui
  • mais ne peut pas utiliser ViewData pour ce genre de validation
  • En tant que meilleures pratiques, essayez toujours d'utiliser des données fortement typées avec Views.ViewModel est le meilleur candidat pour cela.
+1

Je trouve souvent plus propre de charger vos modèles de domaine dans le ViewModel comme des membres privés et d'exposer ce que vous voulez réellement pour le voir à travers les propriétés. En outre, si vous le configurez comme un adaptateur, les données renvoyées à partir de la vue via le modèle de vue peuvent ensuite, à leur tour, hydrater les données sur les objets de domaine masqués. – Sinaesthetic