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

pat*_*dge 5 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)%>
Run Code Online (Sandbox Code Playgroud)

我已经尝试过*允许指定的重载,htmlFieldName但只改变了立即级别.如果我在该调用点有一个前缀,我只需更改附加到前缀的内容.

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

Mic*_*edy 0

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

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

然后在你的代码中

<%= Html.LableFor(m => m.Choices) %><br />
<%=Html.DropDownList("sort", Model.Choices)%>
Run Code Online (Sandbox Code Playgroud)

应该用这个名字。

[希望我没记错。:)]

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