4

我的视图中有一个隐藏字段,如下所示:

using (Html.BeginForm("Action", "Schedule"))
{
    @Html.Hidden("Id", Model.Schedule.Id)
    ...
}

以及一个接收如下信息的操作方法:

public ActionResult AddEventToSchedule(Event NewEvent, Guid Id)
{
    // Do something
}

即使 Model.Schedule.Id 不为空,我也会不断收到一个空的 Guid。我检查了 html 源代码,隐藏字段也是一个空的 Guid(使用断点来验证 Model.Schedule.Id 不为空)。

奇怪的是,当我尝试通过如下模型访问 Id 值时,html 隐藏字段已正确填充 guid,但传递给操作方法的模型为空。

public ActionResult AddEventToSchedule(Event NewEvent, ScheduleModel model)
{
    // model.Schedule is null!
}
4

1 回答 1

14

在这个问题的帮助下解决了这个问题: MVC3 Model Binding - List to Hidden fields

显然,HTML 助手在检查 Model 之前会检查 ModelState 的值。我只在将 Id 作为参数添加到操作方法时才看到这种行为的原因是,它调用了模型绑定器以使用 Id 填充 ModelState。Id 始终为空 Guid 的原因是因为这是第一次调用操作方法时的值。

我将此行添加到我的操作方法中,现在一切正常:

ModelState.Remove("Id")
于 2013-02-21T00:24:57.680 回答