ASP.NET 5 MVC Core分部视图如何移除表单元素的绑定前缀
ASP.NET Core MVC 分部视图绑定前缀移除解决方案
你遇到的前缀问题是因为调用分部视图时使用for属性传递模型,ASP.NET Core会自动将父模型的属性名作为绑定前缀,附加到分部视图内所有表单元素的name和id属性上。可通过以下任意一种方案解决:
- 方案1:修改分部视图调用方式,替换
for为model
把原来的调用代码:
<partial name="Locator" for="LocatorViewModel" />
修改为:
<partial name="Locator" model="Model.LocatorViewModel" />
直接传递模型实例不会触发前缀绑定逻辑,是成本最低的修改方案。
- 方案2:在分部视图内清空绑定前缀
在筛选分部视图的顶部添加以下代码:
@{ ViewData.TemplateInfo.HtmlFieldPrefix = string.Empty; }
该配置会强制清空当前视图下所有HTML Helper生成元素的绑定前缀,无论外部如何传递模型都不会生成前缀。
- 方案3:手动指定表单元素的name属性
将分部视图内的DropDownList改为显式指定name属性,覆盖自动生成的值:
<select name="Brand" asp-items="Model.Brands.Select(s => new SelectListItem { Text = s.Text, Value = s.Value })"> </select>
也可以使用Html.DropDownList的重载手动指定name:
@Html.DropDownList("Brand", Model.Brands.Select(s => new SelectListItem() { Text = s.Text, Value = s.Value }), null, new { name = "Brand" })
以上任意一种方案修改后,生成的select元素name属性为Brand,提交的URL格式为Home/Index?Brand=COLLEGE,控制器的brand参数即可正常接收值。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

