ID POST 作为隐藏字段,但在控制器中为空

本文关键字:控制器 字段 POST 隐藏 ID | 更新日期: 2023-09-27 18:30:17

我有一个表格:

@using (Html.BeginForm("QuoteUpdate", "Home", FormMethod.Post))
{
@Html.DropDownList("network", Model.availableNetworks);
@Html.DropDownList("grade", Model.grades);
@Html.HiddenFor(o => o.Product.id);
<button type="submit">Get Quote</button>
}

还有一个控制器:

    [HttpPost]
    public ActionResult QuoteUpdate(int? id, string network, string grade )
    {
    }

提交表单后,id属性始终为 null。 我已经检查了源代码,隐藏字段在呈现的 HTML 中具有正确的值。

我无法弄清楚为什么这个参数总是为空。 我错过了什么?

ID POST 作为隐藏字段,但在控制器中为空

由于您正在访问模型上的嵌套属性,因此生成的 HTML 可能是这样的:

<input type="hidden" id="Product_id" name="Product.id" />

将窗体发布到控制器操作时,没有与Product.Id匹配的参数。

您可以通过更改生成的input名称来解决此问题(有关如何执行此操作的更多信息,请参阅此答案):

@Html.HiddenFor(o => o.Product.id, new { Name = "id" });

这将产生:

<input type="hidden" id="Product_id" name="id" />

然后,事物应该正确建模绑定。