net mvc from create asp anotation c# asp.net view controller asp.net-mvc-viewmodel

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:

Patrón ASP.NET MVC 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.