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

Gue*_*lla 1 c# asp.net-mvc asp.net-mvc-5.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>
}
Run Code Online (Sandbox Code Playgroud)

和控制器:

    [HttpPost]
    public ActionResult QuoteUpdate(int? id, string network, string grade )
    {
    }
Run Code Online (Sandbox Code Playgroud)

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

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

And*_*ker 9

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

<input type="hidden" id="Product_id" name="Product.id" />
Run Code Online (Sandbox Code Playgroud)

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

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

@Html.HiddenFor(o => o.Product.id, new { Name = "id" });
Run Code Online (Sandbox Code Playgroud)

这会产生:

<input type="hidden" id="Product_id" name="id" />
Run Code Online (Sandbox Code Playgroud)

然后事情应该正确建模绑定.