我在我的EditorTemplate中有一个名为Category.cshtml
@Html.DropDownList("CategoryId", categoryList, new { style = "width: 100%;" })
它似乎会生成Category.CategoryId
而不是预期的CategoryId
,我将其指定为名称属性值。
我做错了什么?是否有可能得到我使用Html.DropDownList指定的名称?
更新1。
我在Telerik网格上下文中使用该编辑器模板:
@(Html.Telerik().Grid<PriceCategoriesModel.PriceRuleModel>()
.Name("pricecategories-grid")
.DataKeys(keys => keys.Add(x => x.Id))
.DataBinding(...)
.Columns(columns =>
{
columns.Bound(x => x.Vendor)
.Width(50);
columns.Bound(x => x.Manufacturer)
.Width(100);
columns.Bound(x => x.Category);
//...
}) //...)
实际上在我使用Telerik的DropDown之前,select元素的名称和名称都是正确生成的。
答案 0 :(得分:2)
反编译Html.DropDownList
后,我发现最终字段名称是通过将this.HtmlFieldPrefix + "."
添加到指定名称并修剪“。”来计算的。后。
然后找到了如何通过ViewData.TemplateInfo.HtmlFieldPrefix
设置此前缀。
然后我把事情放在一起我得到了这个可怕的解决方案。
@{
var oldHtmlFieldPrefix = ViewData.TemplateInfo.HtmlFieldPrefix;
ViewData.TemplateInfo.HtmlFieldPrefix = String.Empty;
}
@Html.DropDownList("CategoryId", categoryList, new { style = "width: 100%;" })
@{
ViewData.TemplateInfo.HtmlFieldPrefix = oldHtmlFieldPrefix;
}
不想使用它 - 请告诉我还有另一种花哨的内置方式来处理它。