我有一张表格:
@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中具有正确的值。
我无法弄清楚为什么这个参数总是为空。我错过了什么?
答案 0 :(得分: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" />
然后应该正确建模绑定。