c# - from - ViewData y ViewModel en MVC ASP.NET
view model mvc c# (2)
¿Qué es ViewData?
- Objeto del diccionario en el que coloca los datos, que luego está disponible para la vista.
Muestra de ViewData
Metodos del método de acción del controlador:
public class HomeController : Controller
{
public ActionResult Index()
{
var featuredProduct = new Product
{
Name = "Smart Phone",
QtyOnHand = 12
};
ViewData["FeaturedProduct"] = featuredProduct;
return View();
}
}
¿Cómo usar ViewData en la vista?
@{
var viewDataProduct = ViewData["FeaturedProduct"] as Product;
}
<div>
Today''s Featured Product is!
<h3>@viewDataProduct.Name</h3>
</div>
¿Qué es un ViewModel?
- Le permite dar forma a múltiples entidades de uno o más modelos de datos o fuentes en un solo objeto
- Optimizado para consumo y renderizado por la vista
Es como :
¿Cómo usar ViewModel con MVC 3?
Modelo de dominio
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; }
}
Método de acción del controlador
[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);
}
Ver - AddProduct.cshtml
@model YourProject.ViewModels.ProductViewModel //set your viewmodel here
Conclusión
- Al usar ViewModel puede pasar datos fuertemente tipados a View
- Pero ViewData tiene una escritura floja. Por lo tanto, es necesario enviar datos en la vista.
- ViewModel puede usar escenarios complejos como fusionar más de un modelo de dominio
- Pero ViewData se puede usar solo para escenarios simples como traer datos para la lista desplegable
- ViewModel puede usarse para escenarios de validación basados en atributos que se necesitan para Ui
- Pero no se puede usar ViewData para ese tipo de validaciones
- Como mejores prácticas siempre intente utilizar datos fuertemente tipados con Views.ViewModel es el mejor candidato para eso.
Soy nuevo en el desarrollo de .Net, y ahora sigo el tutorial de NerdDinner. Me preguntaba si alguno de ustedes podría decirme
¿Cuál es la diferencia entre ViewData y ViewModel?
(Todo lo que sé es que se usan para pasar algún tipo de datos del controlador para ver) y quizás me digan en qué situación debería usar ViewData en lugar de ViewModel y viceversa
¡Gracias por adelantado!
Salida
Ver datos:
En resumen, use ViewData como datos de soporte, como un origen de datos a una lista de selección.
ViewModel:
Cuando una clase de controlador decide presentar una respuesta HTML a un cliente, es responsable de pasar explícitamente a la plantilla de vista todos los datos necesarios para procesar la respuesta. Las plantillas de vista nunca deben realizar ninguna recuperación de datos o lógica de aplicación, y en su lugar deben limitarse a tener solo un código de representación que sea expulsado del modelo / datos que le haya pasado el controlador.
[...]
Al utilizar [el modelo "ViewModel"], creamos clases fuertemente tipadas que están optimizadas para nuestros escenarios de vista específicos, y que exponen propiedades para los valores / contenido dinámico que necesitan nuestras plantillas de vista. Nuestras clases de controlador pueden llenar y pasar estas clases optimizadas para visualización a nuestra plantilla de vista para usar. Esto permite la seguridad de tipos, la verificación en tiempo de compilación y el editor intellisense en las plantillas de visualización.