如何在mvc3中更改razorLabelFor的显示名称?
在剃刀引擎中,我使用LabelFor
帮助器方法来显示名称
但显示名称似乎不好显示。 所以我需要改变我的显示名称如何做到这一点….
@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"})
你可以使用[DisplayName]
属性来修饰你的视图模型属性,并指定要使用的文本:
[DisplayName("foo bar")] public string SomekingStatus { get; set; }
或者使用LabelFor帮助器的另一个重载,它允许您指定文本:
@Html.LabelFor(model => model.SomekingStatus, "foo bar")
而且,不,你不能像在你试图做的那样在MVC3中指定一个类名,因为LabelFor
帮手不支持这个。 但是,这将在MVC4或5中工作。
这是一个古老的问题,但现有的答案忽略了重新生成模型时丢弃任何自定义属性的严重问题。 我正在添加一个更详细的答案来涵盖当前可用的选项。
你有3个选项:
- 将
[DisplayName("Name goes here")]
属性添加到数据模型类。 缺点是,只要重新生成数据模型,就会丢弃它。 - 给你的
Html.LabelFor
添加一个string参数。 例如@Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
参考: https :@Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
.web.mvc.html.labelextensions.labelfor(v = vs.118).aspx这个缺点是你必须在每个视图中重复标签。 - 第三个选项。 使用附加到数据类的元数据类(详情如下)。
选项3 – 添加元数据类:
Microsoft允许在entity framework类上装饰属性, 而不修改现有的类 ! 这是通过将元数据类附加到您的数据库类(实际上是EF类的横向扩展)。 这允许将属性添加到关联的类而不是类本身, 因此重新生成数据模型时更改不会丢失 。
例如,如果你的数据类是带有SomekingStatus
属性的SomekingStatus
,你可以这样做:
首先声明一个同名的部分类 (并使用相同的名称空间),这允许您添加一个类属性而不被覆盖:
[MetadataType(typeof(MyModelMetaData))] public partial class MyModel { }
所有生成的数据模型类都是部分类,它们允许您通过简单地创build更多相同名称的类来添加额外的属性和方法(这非常方便,我经常使用它,例如在模型中提供其他字段types的格式化string版本)。
第2步:添加一个由你的新分部类引用的元数据类:
public class MyModelMetaData { // Apply DisplayNameAttribute (or any other attributes) [DisplayName("My New Label")] public string SomekingStatus; }
参考: https : //msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v = vs.110).aspx
笔记:
- 从内存开始,如果你开始使用一个元数据类,它可能会忽略实际类中的现有属性(
[required]
等),所以你可能需要复制这些元数据类。 - 这不是通过魔法来操作,并不会与任何类一起工作。 查找UI装饰属性的代码旨在首先查找元数据类。
您可以通过使用DisplayName
属性装饰属性来更改标签的文本。
[DisplayName("Someking Status")] public string SomekingStatus { get; set; }
或者,你可以明确地写出原始的HTML:
<label for="SomekingStatus" class="control-label">Someking Status</label>
使用DisplayName属性来装饰模型属性。
@ Html.LabelFor(model => model.SomekingStatus,“foo bar”)