【发布时间】:2010-11-21 17:21:36
【问题描述】:
任何人都知道如何在使用Html.LabelFor(c=>c.MyField) 时指定文本。只是MyField 可能不适合在屏幕上显示,您可能想要“The Super Fantastic Field”代替,但似乎没有任何重载。
有什么想法吗?
【问题讨论】:
标签: c# asp.net-mvc razor
任何人都知道如何在使用Html.LabelFor(c=>c.MyField) 时指定文本。只是MyField 可能不适合在屏幕上显示,您可能想要“The Super Fantastic Field”代替,但似乎没有任何重载。
有什么想法吗?
【问题讨论】:
标签: c# asp.net-mvc razor
你使用System.ComponentModel.DataAnnotations.DisplayAttribute:
[Display(Name = "My Field")]
public string MyField { get; set; }
在属性上设置ResourceType 属性将允许您使用资源文件。
(在 .NET 4 之前使用 System.ComponentModel.DisplayNameAttribute 并注意显示名称必须是编译时常量。)
【讨论】:
using System.ComponentModel;。
Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type。所以这个解决方案似乎对 l18n 不利。
System.ComponentModel.DataAnnotations.DisplayAttribute 允许使用资源文件。如果你还没有在 4/4.5,旧的 System.ComponentModel.DisplayNameAttribute 可以像这样扩展:stackoverflow.com/a/2432520/33533
简单的解决方案只需在视图中添加以下内容:
@Html.LabelFor(c=>c.MyField, "My Field")
【讨论】:
MVC 3 中有一个新的重载,因此您应该能够为 labelfor 助手指定自定义测试。
【讨论】:
我还没有下载 v2,所以我无法测试,但我相信它像 DynamicData 一样工作,在这种情况下,你会在你的模型上做这样的事情:
[Display(Name = "The Super Fantastic Field")]
public string MyField {get;set;}
【讨论】:
有两种方式
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。
使用适合您的目的。
【讨论】:
我还没有检查过 CP1,但我阅读了 Scott 发布的它,我似乎记得代码是由 T4 生成的。我想你总是可以修改它,但我怀疑它们会在 CP2 中提供重载。
编辑:源始终可用,因此您只需修改方法,更改 T4 生成器,就可以了。还为该模块输入票证或请求(以某种方式),以便将其用于下一个版本。
【讨论】:
有 5 个重载。有几个提供“string labelText”的第二个参数,你可以设置为“The Super Fantastic Field”。
【讨论】: