【问题标题】:Html.LabelFor Specified TextHtml.LabelFor 指定文本
【发布时间】:2010-11-21 17:21:36
【问题描述】:

任何人都知道如何在使用Html.LabelFor(c=>c.MyField) 时指定文本。只是MyField 可能不适合在屏幕上显示,您可能想要“The Super Fantastic Field”代替,但似乎没有任何重载。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    你使用System.ComponentModel.DataAnnotations.DisplayAttribute:

    [Display(Name = "My Field")]
    public string MyField { get; set; }
    

    在属性上设置ResourceType 属性将允许您使用资源文件。

    (在 .NET 4 之前使用 System.ComponentModel.DisplayNameAttribute 并注意显示名称必须是编译时常量。)

    【讨论】:

    • 你是赢家。不过你必须有using System.ComponentModel;
    • 我的代码生成器会自动吐出这些,在 Pascal 大小写的单词之间插入空格。像魅力一样工作!
    • 虽然这个解决方案看起来很不错,但我得到了Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type。所以这个解决方案似乎对 l18n 不利。
    • @moose 我已经更新了答案以反映 new-in-.NET-4 System.ComponentModel.DataAnnotations.DisplayAttribute 允许使用资源文件。如果你还没有在 4/4.5,旧的 System.ComponentModel.DisplayNameAttribute 可以像这样扩展:stackoverflow.com/a/2432520/33533
    • @CodeBlend 我使用 T4 生成具有适当属性的模型类。我有一种方法可以将字符串拆分为大写字母,然后用空格再次连接。 (已经3年了,所以暂时没有代码在我面前......)
    【解决方案2】:

    简单的解决方案只需在视图中添加以下内容:

    @Html.LabelFor(c=>c.MyField, "My Field")
    

    【讨论】:

      【解决方案3】:

      MVC 3 中有一个新的重载,因此您应该能够为 labelfor 助手指定自定义测试。

      【讨论】:

      • @Html.LabelFor(model => model.IdCode, "Friendly Name")
      【解决方案4】:

      我还没有下载 v2,所以我无法测试,但我相信它像 DynamicData 一样工作,在这种情况下,你会在你的模型上做这样的事情:

      [Display(Name = "The Super Fantastic Field")]
      public string MyField {get;set;}
      

      【讨论】:

      • 显示不可用,智能感知也无法在任何库中找到它。
      • 添加对 System.ComponentModel.DataAnnotations.dll 的引用并使用 System.ComponentModel.DataAnnotations 添加。
      • 相反,从 GAC 添加对 System.ComponentModel.DataAnnotations 的引用(即在添加引用的 .NET 选项卡中)
      • 我已经使用 DataAnnotations,所以引用不是问题。
      • 啊,抱歉 - 这显然是 Silverlight3/.NET 4.0:msdn.microsoft.com/en-us/library/… 我认为 DisplayName 会按照 itsmecurtis 的建议做你想做的事。更多内容:davidhayden.com/blog/dave/archive/2009/08/19/…
      【解决方案5】:

      有两种方式
      1“直接注释”
      2“带有资源的Annotatinos”
      直接注解

      [Display(Name = "My Field")]
      public string MyField { get; set; }
      

      Annotatinos 与资源

      [Display(Name = "My_Field",ResourceType = typeof(Resource))]
      public string MyField { get; set; }
      

      第二种方法需要在资源文件中添加一个值,可能命名为 Resource.resx
      使用适合您的目的。

      【讨论】:

        【解决方案6】:

        我还没有检查过 CP1,但我阅读了 Scott 发布的它,我似乎记得代码是由 T4 生成的。我想你总是可以修改它,但我怀疑它们会在 CP2 中提供重载。

        编辑:源始终可用,因此您只需修改方法,更改 T4 生成器,就可以了。还为该模块输入票证或请求(以某种方式),以便将其用于下一个版本。

        【讨论】:

        • 不好意思,我正在做一个工作预览,但它并不真正可行,因为我们的字段名称与其描述对应物相比非常虚假。
        【解决方案7】:

        有 5 个重载。有几个提供“string labelText”的第二个参数,你可以设置为“The Super Fantastic Field”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-02
          • 2011-09-09
          • 1970-01-01
          • 1970-01-01
          • 2015-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多