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:
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.
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/ –