不是一个像你想要的那样做的好方法(在你原来的帖子中)。视图应始终具有视图模型。视图模型仅代表您希望在视图上拥有的数据,不多也不少。不要将您的 domail 模型传递给视图,而是使用视图模型。这个视图模型可能只包含你的域模型的一部分属性。
在您的列表视图中,您可能有一个网格,并且在每一行旁边您可能有一个详细信息链接,或者名称上的链接(如您所拥有的那样)。单击其中任何一个链接时,您将被定向到详细信息视图。此详细信息视图将拥有自己的视图模型,其中仅包含您需要在详细信息视图上显示的属性。
domail 模型可能类似于:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string ExampleProperty1 { get; set; }
public string ExampleProperty2 { get; set; }
public string ExampleProperty3 { get; set; }
}
假设您只想显示此人的 id、名字、姓氏和年龄,那么您的视图模型将如下所示:
public class PersonDetailsViewModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
您不需要 ExampleProperty1、ExampleProperty2 和 ExampleProperty3,因为它们不是必需的。
您的人员控制器可能如下所示:
public class PersonController : Controller
{
private readonly IPersonRepository personRepository;
public PersonController(IPersonRepository personRepository)
{
// Check that personRepository is not null
this.personRepository = personRepository;
}
public ActionResult Details(int id)
{
// Check that id is not 0 or less than 0
Person person = personRepository.GetById(id);
// Now that you have your person, do a mapping from domain model to view model
// I use AutoMapper for all my mappings
PersonDetailsViewModel viewModel = Mapper.Map<PersonDetailsViewModel>(person);
return View(viewModel);
}
}
我希望这能让事情更清楚一点。