【问题标题】:Nested EditorFor/DisplayFor override field name嵌套的 EditorFor/DisplayFor 覆盖字段名称
【发布时间】:2011-05-09 06:10:32
【问题描述】:

没有用空字符串覆盖 ViewData.TemplateInfo.HtmlFieldPrefix,有没有办法防止前缀通过嵌套的强类型 EditorFor 或 DisplayFor 帮助器调用?

这是我迄今为止工作的丑陋标记/代码:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    如果你的视图模型上有一个属性,而不是直接在模型上做下拉列表,你可以在它上面放一个 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

    【讨论】:

    • 我正在寻找一种方法来覆盖 HTML 字段的 ID 属性中的前缀(用于回程时的模型绑定),而不是其面向用户的显示名称。
    【解决方案2】:

    不确定我是否理解您的问题,但是,如果您将“子”视图呈现为部分视图而不是 EditorFor,则这些字段将不会加前缀。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 2012-06-13
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多