0

我在 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. 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为空:

 [HttpPost]
        public ActionResult Edit(Guid id, UserViewModel model)
        {

我做错了什么吗?过去我只是简单地传递了整个模型,但这并不理想。我有点在黑暗中刺伤,只是想在转向 SO 之前我会尝试自己实现它!

4

2 回答 2

3

我认为这可能是因为您没有 {get;set;} 在您的视图模型中声明。看到这篇文章:{get; 放; 在 ViewModel 中使用

于 2012-08-10T15:46:00.377 回答
2

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

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

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

于 2012-08-10T15:52:22.497 回答