Html.LabelFor指定的文字


83

任何人都对使用时如何指定文本有任何想法Html.LabelFor(c=>c.MyField)。它MyField可能不是在屏幕上显示的适当名称,您可能想要“ The Super Fantastic Field”,但似乎没有任何重载。

有任何想法吗?

Answers:


139

您使用System.ComponentModel.DataAnnotations.DisplayAttribute

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

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

(.NET 4之前System.ComponentModel.DisplayNameAttribute的警告是,显示名称必须是编译时常量。)


9
你是赢家。你必须有using System.ComponentModel;
Kezzer

我的代码生成器会自动吐出这些内容,并在Pascal大小写的单词之间插入空格。奇迹般有效!
GalacticCowboy 2010年

尽管此解决方案看起来不错,但我得到了Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type。因此,这种解决方案似乎对18n不利。
Martin Thoma 2013年

@moose我已经更新了答案,以反映System.ComponentModel.DataAnnotations.DisplayAttribute允许使用资源文件的.NET-4的新功能。如果您尚未使用4 / 4.5,则System.ComponentModel.DisplayNameAttribute可以像这样扩展旧版本:stackoverflow.com/a/2432520/33533
Curtis

@CodeBlend我正在使用T4生成具有适当属性的模型类。我有一种方法,可以将字符串用大写字母分割,然后再用空格连接。(已经3年了,所以现在没有代码在我面前……)
GalacticCowboy


26

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


8
@ Html.LabelFor(model => model.IdCode,“ Friendly Name”)
Dave Mateer

3

我尚未下载v2,因此无法测试,但我相信它的工作方式类似于DynamicData,在这种情况下,您可以在模型上执行以下操作:

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

显示不可用,并且intellisense也无法在任何库中找到它。
Kezzer

添加对System.ComponentModel.DataAnnotations.dll的引用,并使用System.ComponentModel.DataAnnotations添加。
丹尼尔(Daniel)2009年

而是从GAC添加对System.ComponentModel.DataAnnotations的引用(即,在添加引用的.NET选项卡中)
Daniel

我已经使用了DataAnnotations,所以引用不是问题。
Kezzer

3
啊,对不起-显然是Silverlight3 / .NET 4.0:msdn.microsoft.com/zh-cn/library / ... 我认为DisplayName会按照它的要求行事。下面是更多的对:davidhayden.com/blog/dave/archive/2009/08/19/...
丹尼尔

2

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

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

Annotatinos有资源

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

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


0

我还没有签出CP1,但我读了Scott发行的CP1,似乎还记得该代码是由T4生成的。我想您总是可以修改它,但是我怀疑它们会在CP2中提供重载。

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


不好意思,我正在做一个工作预览,但这并不可行,因为我们的字段名称与其描述对应名称相比是虚假的。
Kezzer

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.