Id POST为隐藏字段,但在控制器中为null

问题描述 投票:1回答:2

我有一个表格:

@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中具有正确的值。

我无法弄清楚为什么此参数始终为null。我想念什么?

c# asp.net-mvc asp.net-mvc-5.2
2个回答
9
投票

由于您正在访问模型上的嵌套属性,因此生成的HTML可能类似于以下内容:

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

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

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

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

将生成:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.