如何在mvc3中更改剃刀中LabelFor的显示名称?

Sha*_*ham 80 html-helper asp.net-mvc-3

在剃刀引擎中,我使用了LabelFor帮助方法来显示名称

但显示名称似乎不好显示.所以我需要更改我的显示名称如何做到....

@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"}) 
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 154

您可以使用[DisplayName]属性修饰视图模型属性并指定要使用的文本:

[DisplayName("foo bar")]
public string SomekingStatus { get; set; }
Run Code Online (Sandbox Code Playgroud)

或者使用LabelFor帮助器的另一个重载,它允许您指定文本:

@Html.LabelFor(model => model.SomekingStatus, "foo bar")
Run Code Online (Sandbox Code Playgroud)

并且,不,您不能像在尝试那样在MVC3中指定类名,因为LabelFor帮助程序不支持它.但是,这可以在MVC4或5中使用.

  • 您需要使用System.ComponentModel. (8认同)
  • 但是,如果更新数据库,则会重新生成模型类,并且会丢失它.你怎么避免这种情况? (3认同)
  • 这很有用,谢谢.但是我认为你的答案会更好,如果你有这个'@ Html.LabelFor(model => model.SomekingStatus,"foo bar以外的东西") (2认同)
  • 也许这是前一段时间写的,但现在你可以在LabelFor中指定类名:例如@ Html.LabelFor(model => model.SomekingStatus,new {@class ="your-css-class"}) (2认同)

Gon*_*ing 30

这是一个老问题,但现有的答案忽略了在重新生成模型时丢弃任何自定义属性的严重问题.我正在添加更详细的答案,以涵盖当前可用的选项.

你有3个选择:

  • [DisplayName("Name goes here")]属性添加到数据模型类.缺点是,无论何时重新生成数据模型,都会丢弃它.
  • 添加一个字符串参数到您的Html.LabelFor.例如:@Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})参考:https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v = vs.118).aspx这方面的缺点是你必须重复这个标签在每个视图中.
  • 第三种选择.使用附加到数据类的元数据类(详细信息如下).

选项3 - 添加元数据类:

Microsoft允许在Entity Framework类上装饰属性,而无需修改现有类!这是通过附加到数据库类的元数据类(实际上是EF类的横向扩展).这允许将属性添加到关联的类而不是类本身,以便在重新生成数据模型时不会丢失更改.

例如,如果您的数据类MyModel具有SomekingStatus属性,则可以这样执行:

首先声明一个同名的部分类(并使用相同的命名空间),这允许您添加一个类属性而不被覆盖:

[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Run Code Online (Sandbox Code Playgroud)

所有生成的数据模型类都是部分类,它允许您通过简单地创建更多相同名称的类来添加额外的属性和方法(这非常方便,我经常使用它,例如在模型中提供其他字段类型的格式化字符串版本).

第2步:添加新分部类引用的元数据类:

public class MyModelMetaData
{
    // Apply DisplayNameAttribute (or any other attributes)
    [DisplayName("My New Label")]
    public string SomekingStatus;
}
Run Code Online (Sandbox Code Playgroud)

参考: https ://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v = vs.110).aspx

笔记:

  • 从内存中,如果您开始使用元数据类,它可能会忽略实际类([required]等)上的现有属性,因此您可能需要复制元数据类中的那些属性.
  • 这不是魔法操作,不会只适用于任何类.查找UI修饰属性的代码旨在首先查找元数据类.


xan*_*ded 15

您可以通过使用DisplayName属性装饰属性来更改标签的文本.

[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }
Run Code Online (Sandbox Code Playgroud)

或者,您可以明确地编写原始HTML:

<label for="SomekingStatus" class="control-label">Someking Status</label>
Run Code Online (Sandbox Code Playgroud)