嵌套的EditorFor / DisplayFor覆盖字段名称

时间:2010-11-12 18:51:20

标签: asp.net-mvc asp.net-mvc-2

如果没有用空字符串覆盖ViewData.TemplateInfo.HtmlFieldPrefix,是否有办法防止前缀在嵌套的强类型EditorFor或DisplayFor助手调用上发生?

这是我到目前为止工作的丑陋标记/代码:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Web.Mvc.SelectList>" %>
<% ViewData.TemplateInfo.HtmlFieldPrefix = ""; %>
<%=Html.DropDownList("sort", Model)%>

我已经尝试了* For over,允许指定htmlFieldName,但这只会改变直接级别。如果我在该调用点有一个前缀,我只需更改附加到前缀的内容。

我可以手工编写模板标记,但对SelectList对象这样做似乎我只会通过一次调整来复制MVC源,因为它涉及对象数据绑定逻辑。

2 个答案:

答案 0 :(得分:0)

如果视图模型上有属性,而不是直接在模型上执行下拉列表,则可以在其上放置DataAnnontation属性。

public class MyModel
{
   [Display(Name="Your Favorite Choices")]
   public string[] Choices {get; set;}
}

然后在你的代码中

<%= Html.LableFor(m => m.Choices) %><br />
<%=Html.DropDownList("sort", Model.Choices)%>

应该使用该名称。

[希望我从记忆中得到它。 :)]

这是MSDN链接: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayattribute.displayattribute.aspx

答案 1 :(得分:0)

不确定我是否理解您的问题,但是,如果您将“子”视图渲染为局部而不是编辑器,那么这些字段将不会被添加前缀。