我一直在研究mvc的视图模型,并正在寻找最佳方法。我已经阅读了很多不同的文章,但没有一篇文章能够清晰地说明“最佳方法”。例如,我可能有一个包含以下属性的客户模型:
我想编辑此客户,但仅限于名字、姓氏和位置。我不关心编辑中的头衔。所以,在我的视图中,我需要传递一个客户和一个选择列表。
从我阅读的内容来看,我有以下选项(可能还有更多)。
所以我的问题基本上是哪个是最好的?
1)
将选择列表添加到
2)
创建一个视图模型,其中我传递客户和选择列表(数据访问在控制器中完成):
- 名字
- 姓氏
- 头衔
- 位置
我想编辑此客户,但仅限于名字、姓氏和位置。我不关心编辑中的头衔。所以,在我的视图中,我需要传递一个客户和一个选择列表。
从我阅读的内容来看,我有以下选项(可能还有更多)。
所以我的问题基本上是哪个是最好的?
1)
将选择列表添加到
ViewData [“Location”]
中,只需创建强类型的客户端视图?2)
创建一个视图模型,其中我传递客户和选择列表(数据访问在控制器中完成):
public class ViewModelTest
{
public Customer Customer { get; set; }
public SelectList Locations { get; set; }
public ViewModelTest(Customer customer, SelectList locations)
{
Customer = customer;
Locations = locations;
}
}
3)
创建一个视图模型,其中我传递客户和位置列表,并在视图模型中创建选择列表。
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)传入客户和存储库,并在视图模型中进行数据访问。
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)
只创建包含我所需属性的视图模型:
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)
或者采用以上任意组合或其他方式。
欢迎各种意见。