相关疑难解决方法(0)

为什么Html Helper为视图模型的子项添加前缀?

我有一个具有单个子实体和各种其他属性的视图模型.

在我看来,我想显示子实体的表单.使用以下代码:

@Html.HiddenFor(model => model.Item.ItemID)
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

<input id="Item_ItemID" name="Item.ItemID" type="hidden" value="234" />
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,Html帮助器已经为idname属性添加了前缀,而我希望输出为

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

因此,前一个输出在提交表单时会导致错误,因为表单元素与子实体上的属性不对应.

我知道我可以通过对隐藏字段进行硬编码来解决这个问题

<input id="ItemID" name="ItemID" type="hidden" value="@Model.Item.ItemID" />
Run Code Online (Sandbox Code Playgroud)

哪种方式会破坏拥有Html帮助程序的原因,或者创建局部视图并传入子对象

@{Html.RenderPartial("ItemForm", Model.Item);}
Run Code Online (Sandbox Code Playgroud)

我知道能够将html属性传递给方法,并且还编写自己的扩展方法,但是当涉及数据验证和jQuery时,事情变得更加复杂,即以下代码:

@Html.EditorFor(model => model.Item.Title)
@Html.ValidationMessageFor(model => model.Item.Title)
Run Code Online (Sandbox Code Playgroud)

生成此代码:

<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>
Run Code Online (Sandbox Code Playgroud)

所以需要一个优雅的方法来保持属性名称同步.

那么任何人都可以回答为什么HtmlHelper为视图模型的子项添加前缀到属性?作为一个后续问题,还有其他任何防止添加前缀的巧妙方法吗?

razor

4
推荐指数
1
解决办法
1388
查看次数

标签 统计

razor ×1