Html.Hidden字段未设置

时间:2013-02-20 23:48:49

标签: asp.net-mvc

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

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值时,使用guid正确填充了html隐藏字段,但传递给action方法的模型为空。

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

1 个答案:

答案 0 :(得分:13)

借助这个问题想出来: MVC3 Model Binding - List to Hidden fields

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

我在行动方法中添加了这一行,现在一切正常:

ModelState.Remove("Id")