我尝试使用CodeFirst和实体框架在MSMVC中使用DataBinding。我尝试将带有外键的模型传递给视图,编辑数据并在执行更新之前将结果绑回到控制器操作中。
简单地说,我如何让Entity填充控制器上的外键对象的值。
该模型非常简单,只包含一个字符串' Text'和外键UserModel' User'。 BaseModel仅包含Id和DateTime。
public class CommentModel : BaseModel
{
[Required]
[Display(Name = "Text")]
public string Text { get; set; }
public virtual UserModel User { get; set; }
}
在我的Razor视图中,我有一个User.Id的隐藏字段:
@Html.HiddenFor(model => model.User.Id)
在我的控制器动作中,我有:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(CommentModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
_commentsRepository.Update(model);
return RedirectToAction("Index");
}
问题是ModelState包含错误,因为只填充UserModel的Id属性?
谁能告诉我我做错了什么?
答案 0 :(得分:1)
您是否通过视图中的表单字段设置了其他属性,或者您是仅仅因为其他原因而返回用户的ID。
如果要在视图中更新UserModel的其他属性,那么只要命名约定正确,这些应该通过模型绑定自动序列化“即ID =”User.Id“或ID =”User.FirstName“。 ..