2011-03-03 34 views
10

Soy nuevo en el desarrollo de .Net, y ahora sigo el tutorial de NerdDinner. Sólo me preguntaba si alguno de ustedes sería capaz de decirmeViewData y ViewModel en MVC ASP.NET

¿Cuál es la diferencia entre ViewData y modelo de vista

(único que sé es que se utilizan para pasar algún tipo de datos desde el controlador de ver) y tal vez me diga en qué situación debería usar ViewData en lugar de ViewModel y viceversa

¡Gracias de antemano!

de Sally

Respuesta

7

ViewData:

En resumen, el uso ViewData como datos de soporte, tal como una fuente de datos a un SelectList.

modelo de vista:

ASP.NET MVC ViewModel Pattern

Cuando una clase controlador decide emitir una respuesta HTML de nuevo a un cliente , que es responsable de pasando explícitamente a la plantilla de vista toda la los datos necesarios para representan la respuesta. Ver plantillas nunca debe realizar ninguna recuperación o aplicación lógica de datos - y lugar deben limitarse a sólo tienen código de renderizado que se expulsados ​​del modelo/datos pasados ​​a que por el controlador.

[...]

Al utilizar [el "modelo de vista"] creamos patrón de tipo fuerte clases que están optimizadas para nuestros escenarios específica de la vista, y que exponen propiedades dinámicas de los valores /contenido necesario para nuestra vista plantillas. Nuestras clases de controlador pueden luego rellenar y pasar estas clases optimizadas para vista a nuestra plantilla de ver para usar. Esto habilita tipo de seguridad, verificación en tiempo de compilación, y editor intellisense en plantillas de vista .

+0

Gracias por su respuesta, en caso de que alguien necesite saber más sobre este tema, también encontré una gran entrada de blog relacionada con mi pregunta http://theminimalistdeveloper.com/2010/08/21/why-when-and- how-to-use-typed-views-and-viewmodel-pattern-in-asp-net-mvc/ –

9

¿Qué es ViewData? diccionario

  • objeto que se pone datos en, que luego se convierte disponibles a la vista.

ViewData Muestra

método Acción controlador gusta:

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

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

Cómo utilizar ViewData en Vista?

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

¿Qué es un modelo de vista?

  • Permitir dar forma a múltiples entidades de uno o más modelos de datos o fuentes en un único objeto
  • optimizado para el consumo y representación de la vista

que su gusto:

View Model image

¿Cómo usar ViewModel con MVC 3?

modelo de dominio Método

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; } 

    } 

Acción 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); 
} 

Vista - AddProduct.cshtml

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

Conclusión

  • Mediante el uso de modelo de vista puede pasar datos de tipo fuerte a la vista
  • Pero ViewData es sin apretar Typed.So necesidad de emitir datos sobre Ver
  • ViewModel se puede usar para escenarios complejos como fusionar más de un modelo de dominio
  • Pero ViewData sólo se puede utilizar para escenarios simples como llevar los datos de la lista desplegable
  • modelo de vista puede utilizar para escenarios de validación basados ​​en atributos, que sea necesario para Ui
  • pero no puede utilizar ViewData para este tipo de validaciones
  • Como mejores prácticas siempre tratan de utilizar los datos con establecimiento inflexible con Views.ViewModel es el mejor candidato para eso.
+1

A menudo me parece más limpio cargar los modelos de dominio necesarios en el ViewModel como miembros privados y exponer lo que realmente desea para el ver a través de las propiedades. Además, si lo configura como un adaptador, los datos devueltos por la vista a través del modelo de vista podrían, a su vez, hidratar los datos en los objetos de dominio ocultos. – Sinaesthetic

Cuestiones relacionadas