我的视图中有一个隐藏字段,如下所示:
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!
}
在这个问题的帮助下弄清楚了这一点:MVC3 模型绑定 - 隐藏字段列表
显然,HTML 助手在检查 Model 之前先检查 ModelState 的值。
当我将 Id 作为参数添加到操作方法时才看到此行为的原因是,这会调用模型绑定器以使用 Id 填充 ModelState。 Id 始终是空 Guid 的原因是因为这是第一次调用操作方法时的值。
我将此行添加到我的操作方法中,现在一切正常:
ModelState.Remove("Id")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)