我有一个带有单个子实体和各种其他属性的视图模型。
在我看来,我想为子实体显示一个表单。使用以下代码:
@Html.HiddenFor(model => model.Item.ItemID)
产生以下输出:
<input id="Item_ItemID" name="Item.ItemID" type="hidden" value="234" />
如您所见,Html 帮助程序以id
andname
属性为前缀,而我预计输出为
<input id="ItemID" name="ItemID" type="hidden" value="234" />
因此,前一个输出在提交表单时会导致错误,因为表单元素与子实体上的属性不对应。
我知道我可以通过硬编码隐藏字段来解决这个问题
<input id="ItemID" name="ItemID" type="hidden" value="@Model.Item.ItemID" />
哪一种打败了拥有 Html 助手或创建局部视图并传入子对象的原因
@{Html.RenderPartial("ItemForm", Model.Item);}
我知道能够将 html 属性传递给该方法,并且还可以编写自己的扩展方法,但是当涉及数据验证和 jQuery 时,事情会变得更加复杂,即以下代码:
@Html.EditorFor(model => model.Item.Title)
@Html.ValidationMessageFor(model => model.Item.Title)
产生这个代码:
<input class="text-box single-line" data-val="true" data-val-required="The Title field is required." id="Item_Title" name="Item.Title" type="text" value="Some text" />
<span class="field-validation-valid" data-valmsg-for="Item.Title" data-valmsg-replace="true"></span>
所以需要一种优雅的方法来保持属性名称同步。
那么谁能回答为什么 HtmlHelper 会为视图模型的子项的属性添加前缀?作为后续问题,是否有任何其他巧妙的方法可以防止添加前缀?