89

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

但是显示名称似乎不好显示。所以我需要更改我的显示名称怎么做....

@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"}) 
4

5 回答 5

164

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

[DisplayName("foo bar")]
public string SomekingStatus { get; set; }

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

@Html.LabelFor(model => model.SomekingStatus, "foo bar")

而且,不,你不能像你试图做的那样在 MVC3 中指定一个类名,因为LabelFor助手不支持它。但是,这适用于 MVC4 或 5。

于 2012-07-25T13:53:02.743 回答
31

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

您有 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 允许在实体框架类上装饰属性,而无需修改现有类!这是通过将元数据类附加到您的数据库类(实际上是您的 EF 类的横向扩展)来实现的。这允许将属性添加到关联的类而不是类本身,这样在重新生成数据模型时更改不会丢失

例如,如果你的数据类MyModel有一个SomekingStatus属性,你可以这样做:

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

[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}

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

第 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 装饰属性的代码旨在首先查找元数据类。
于 2015-07-24T10:40:27.107 回答
15

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

[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }

或者,您可以显式编写原始 HTML:

<label for="SomekingStatus" class="control-label">Someking Status</label>
于 2012-07-25T13:52:21.317 回答
4

使用 DisplayName 属性装饰模型属性。

于 2012-07-25T13:53:02.733 回答
1

@Html.LabelFor(model => model.SomekingStatus, "foo bar")

于 2017-11-08T12:09:36.143 回答