我在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之前我自己尝试实现它!
答案 0 :(得分:3)
我认为这可能是因为您没有在视图模型中声明{get; set;}。请参阅此帖子:{ get; set; } used in ViewModel
答案 1 :(得分:2)
您将备注声明为field
。模型绑定不适用于字段。您应该将其声明为属性
public class UserViewModel
{
public string notes {set;get;}
}
ASP.NET MVC框架包括默认的模型绑定器实现 命名为DefaultModelBinder,旨在有效绑定 大多数模型类型。它通过使用相对简单和 目标模型的每个属性的递归逻辑: