0

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

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

4

1 回答 1

1

您是否通过视图中的表单字段设置了其他属性,或者您是否只是出于其他原因将用户的 ID 传回。

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

于 2013-09-12T00:57:39.527 回答