Asp.net mvc 未设置Html.Hidden字段

Asp.net mvc 未设置Html.Hidden字段,asp.net-mvc,Asp.net Mvc,我的视图中有一个隐藏字段,如下所示: using (Html.BeginForm("Action", "Schedule")) { @Html.Hidden("Id", Model.Schedule.Id) ... } public ActionResult AddEventToSchedule(Event NewEvent, Guid Id) { // Do something } 以及一种接收以下信息的操作方法: using (Html.BeginForm("Ac

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

using (Html.BeginForm("Action", "Schedule"))
{
    @Html.Hidden("Id", Model.Schedule.Id)
    ...
}
public ActionResult AddEventToSchedule(Event NewEvent, Guid Id)
{
    // Do something
}
以及一种接收以下信息的操作方法:

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,但是传递到action方法的模型是空的

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

在这个问题的帮助下解决了这个问题:

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

我将这句话添加到我的动作方法中,现在一切都正常了:

ModelState.Remove("Id")

它帮助我通过使用@Html.HiddenFor(m=>m.Name)来解决这个问题