He estado buscando modelos de vista para mvc y estoy buscando la mejor manera de hacerlo. He leído muchos artículos diferentes, pero ninguno parece estar claro como la "mejor manera". Hasta ahora ejemplo que podría tener un modelo de atención al cliente con las siguientes propiedades:asp.net mvc viewmodels. Cuánta lógica (si hay alguna) deberían contener
- Nombre
- Apellido
- Título
- Ubicación
donde la ubicación es una clave externa a una ubicación tabla en la base de datos.
Quiero poder editar este cliente, pero solo el nombre, el apellido y la ubicación. No me molesta el título en la edición. Entonces, en mi opinión, tendré que pasar a un cliente y una lista seleccionada.
Ahora, por lo que he leído, tengo las siguientes opciones (probablemente haya muchas más).
Así que mi pregunta es, básicamente, ¿cuál es la mejor?
1)
Añadir una lista de selección a la ViewData["Location"]
y simplemente crear una vista inflexible de tipos de cliente?
2)
crear un modelo de vista en la que pase un cliente y seleccione lista (el acceso a los datos se realiza en el controlador):
public class ViewModelTest
{
public Customer Customer { get; set; }
public SelectList Locations { get; set; }
public ViewModelTest(Customer customer, SelectList locations)
{
Customer = customer;
Locations = locations;
}
}
3)
crear un modelo de vista donde paso un cliente y una lista de ubicaciones y creo la lista de selección en el modelo de vista.
public class ViewModelTest
{
public Customer Customer { get; set; }
public SelectList Locations { get; set; }
public ViewModelTest(Customer customer, List<Location> locations, string selectedLocation)
{
Customer = customer;
Locations = new SelectList(locations, "LocationID", "LocationName", selectedLocation);
}
}
4)
pasa un cliente y el repositorio y hacer el acceso a los datos en el modelo de vista.
public class ViewModelTest
{
public Customer Customer { get; set; }
public SelectList Locations { get; set; }
public ViewModelTest(Customer customer, IRepository repository, string selectedLocation)
{
Customer = customer;
Locations = new SelectList(repository.GetLocations(), "LocationID", "LocationName", selectedLocation);
}
}
5)
crear el modelo de la vista con sólo las propiedades que necesito:
public class ViewModelTest
{
public string FirstName { get; set; }
public string LastName { get; set; }
public SelectList Locations { get; set; }
public ViewModelTest(Customer customer, SelectList locations)
{
FirstName = customer.FirstName;
LastName = customer.LastName ;
Locations = locations;
}
}
6)
o alguna otra combinación de los anteriores u otra manera.
Todas las opiniones son bienvenidas.