编辑器模板中的Html.DropDownList生成错误的名称

时间:2014-05-21 21:04:13

标签: c# asp.net asp.net-mvc-4 razor telerik-mvc

我在我的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元素的名称和名称都是正确生成的。

1 个答案:

答案 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;
}

不想使用它 - 请告诉我还有另一种花哨的内置方式来处理它。