如何让Entity在控制器操作中填充外键对象的值?

时间:2013-09-12 00:29:38

标签: c# asp.net-mvc entity-framework razor data-binding

我尝试使用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属性?

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

您是否通过视图中的表单字段设置了其他属性,或者您是仅仅因为其他原因而返回用户的ID。

如果要在视图中更新UserModel的其他属性,那么只要命名约定正确,这些应该通过模型绑定自动序列化“即ID =”User.Id“或ID =”User.FirstName“。 ..