使用viewmodel时,模型项为null

时间:2012-08-10 15:35:53

标签: c# asp.net-mvc-3

我在MVC3中为我的用户提供了我的模型:

public class User
{
    [Key]
    public virtual Guid UserId { get; set; }

    [Required]
    public virtual String Username { get; set; }

    [DataType(DataType.MultilineText)]
    public virtual String Comment { get; set; }

   ..loads of other properties

此类包含我在编辑屏幕中不需要的大量信息。假设我只想编辑comment的{​​{1}}部分。我试图创建一个像这样的viewmodel但不确定我是否正确的

查看模型

user

现在我在控制器中有这个:

 public class UserViewModel
  {
    public string notes;

  }

这部分似乎工作正常,如果存在则传递信息。 编辑视图是这样的:

public ActionResult Edit(Guid id)
        {
           User user = Context.Users.Where(x => x.UserId == id).First();
          UserViewModel uvm = new UserViewModel();
          uvm.notes = user.Comment;
            return View(uvm);
        }

显示控制器的注释/注释。 但是,如果我按提交,该模型将被取消 - 此时@model core.Areas.Manage.Models.UserViewModel @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>User Edit</legend> @Html.TextBoxFor(model => model.notes) <p> <input type="submit" value="Save" /> </p> </fieldset> } 为空:

model.notes

我做错了吗?在过去,我只是简单地通过了整个模型,但这并不是很理想。 我有点在黑暗中捅了一下,只是想在我转向SO之前我自己尝试实现它!

2 个答案:

答案 0 :(得分:3)

我认为这可能是因为您没有在视图模型中声明{get; set;}。请参阅此帖子:{ get; set; } used in ViewModel

答案 1 :(得分:2)

您将备注声明为field。模型绑定不适用于字段。您应该将其声明为属性

public class UserViewModel
{
  public string notes  {set;get;}
}
  

ASP.NET MVC框架包括默认的模型绑定器实现   命名为DefaultModelBinder,旨在有效绑定   大多数模型类型。它通过使用相对简单和   目标模型的每个属性的递归逻辑: