MVC - 在视图中部分更新模型

gdp*_*gdp 0 nhibernate asp.net-mvc viewmodel

下面是场景:我有一个像这样的User对象:

 public class User : BaseEntity<User>, IAggregateRoot
 {
    public virtual string Name { get; set; }
    public virtual string Username { get; set; }
    public virtual string Password { get; set; }
    public virtual string SecretQuestion { get; set; }
    public virtual string SecretAnswer { get; set; }
    public virtual DateTime LastLogin { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

在编辑这个对象的过程中,我将它加载到视图中,但我只想更新一些属性(即我不想更新LastLogin属性).在这种情况下,我该怎么办?

是创建用户视图模型的最佳策略,当我尝试使用null LastLogin字段更新用户对象时,nhibernate是否应对此问题?

提前致谢.

编辑

像这样的东西:

public class UserViewModel
{
  public string Name {get;set;}
  public string UserName {get;set;}
  public string Password {get;set;}
  public string SecretQuestion {get;set;}
  public string SecretAnswer {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后编辑:

public ActionResult Edit(int id)
{
  return View(_userRepository.FindById(id));
}

[HttpPost]
public ActionResult Edit(int id, UserViewModel userViewModel)
{
  try
  {

    //Not sure how to update the model 
    //with the view Model and save.

    _userRepository.Update(????);
    return RedirectToAction("Index");
  }
  catch
  {
    return View();
  }
}
Run Code Online (Sandbox Code Playgroud)

And*_*per 8

一种好方法是创建一个UserViewModel仅包含要显示/更新的属性.不要让nHibernate知道视图模型.然后,当编辑回发到控制器时,您从nHibernate检索实际的User对象,从视图模型更新它的属性,然后将其保存回数据库.

更新

像这样的东西:

[HttpPost]
public ActionResult Edit(int id, UserViewModel userViewModel)
{
  try
  {
    User model = _userRepository.FindById(id);

    model.Name = userViewModel.Name;
    model.Username = userViewModel.Username;
    model.Password = userViewModel.Password;
    model.SecretQuestion = userViewModel.SecretQuestion;
    model.SecretAnswer = userViewModel.SecretAnswer;

    _userRepository.Update(model);
    return RedirectToAction("Index");
  }
  catch
  {
    return View();
  }
}
Run Code Online (Sandbox Code Playgroud)

在我最近一直在研究的项目中,我创建了一个ViewModelBase类,该类包含将属性从域模型映射到视图模型的方法,并根据属性名称和类型的匹配再次返回.我的所有视图模型都是从ViewModelBase派生的.

还有像AutoMapper这样的工具可以做很多这样的事情.