Asp.net mvc 3 如何在mvc3中更改razor中LabelFor的显示名称?

Asp.net mvc 3 如何在mvc3中更改razor中LabelFor的显示名称?,asp.net-mvc-3,html-helper,Asp.net Mvc 3,Html Helper,在razor引擎中,我使用了LabelForhelper方法来显示名称 但显示名称似乎不适合显示。 因此,我需要更改我的显示名称如何操作 @Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"}) 您可以通过使用DisplayName属性修饰属性来更改标签的文本 [DisplayName("Someking Status")] public string SomekingStatus {

在razor引擎中,我使用了
LabelFor
helper方法来显示名称

但显示名称似乎不适合显示。 因此,我需要更改我的显示名称如何操作

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

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

[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }
或者,您可以显式编写原始HTML:

<label for="SomekingStatus" class="control-label">Someking Status</label>
Someking状态

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

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

[DisplayName("foo bar")]
public string SomekingStatus { get; set; }
或者使用LabelFor helper的另一个重载,该重载允许您指定文本:

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

而且,不可以,您不能像以前那样在MVC3中指定类名,因为
LabelFor
helper不支持这样做。但是,这在MVC4或MV5中是可行的。

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

您有3种选择:
  • 向数据模型类添加一个
    [DisplayName(“Name在此”)]
    属性。缺点是,每当您重新生成数据模型时,都会将其丢弃
  • Html.LabelFor
    中添加字符串参数。e、 g.
    @Html.LabelFor(model=>model.SomekingStatus,“我的新标签”,New{@class=“control Label”})
    Reference:这样做的缺点是必须在每个视图中重复标签
  • 第三种选择。使用附加到数据类的元数据类(详细信息如下)
选项3-添加元数据类: Microsoft允许在实体框架类上修饰属性,而无需修改现有类!这是通过将元数据类附加到数据库类(实际上是EF类的横向扩展)来实现的。这允许将属性添加到关联的类而不是类本身,因此在重新生成数据模型时更改不会丢失

例如,如果您的数据类是带有
SomekingStatus
属性的
MyModel
,您可以这样做:

首先声明具有相同名称(并使用相同命名空间)的分部类,这允许您添加类属性而不被重写:

[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
所有生成的数据模型类都是分部类,它允许您通过创建更多同名类来添加额外的属性和方法(这非常方便,我经常使用它,例如,提供模型中其他字段类型的格式化字符串版本)

步骤2:添加新分部类引用的metatadata类:

public class MyModelMetaData
{
    // Apply DisplayNameAttribute (or any other attributes)
    [DisplayName("My New Label")]
    public string SomekingStatus;
}
参考资料:

笔记:
  • 在内存中,如果您开始使用元数据类,它可能会忽略实际类上的现有属性(
    [必需]
    等),因此您可能需要复制元数据类中的属性
  • 这并不是靠魔法操作的,也不仅仅适用于任何类。查找UI装饰属性的代码设计为首先查找元数据类

@ HTML。LabelFor(Model=> Model。某个状态,“Fo-bar”)

@ Raj2SeCAR1,如果它正在工作,并且这个答案帮助你解决你所遇到的问题,你应该考虑点击它旁边的记号来回答它:虽然你需要使用Stult.CultEngel。这是有用的,谢谢。但是我认为如果你用这个来代替
@Html.LabelFor(model=>model.SomekingStatus,“foo-bar以外的东西”)
也许这是不久前写的,但是现在你可以在LabelFor中指定类名:例如@Html.LabelFor(model=>model.SomekingStatus,new{@class=“your css class”})但是,如果更新数据库,则会重新生成模型类,并且会丢失它。如何避免这种情况?@shim:您不应该在视图中直接使用数据库/域模型类,通常在这两者之间会有一个中间的“视图模型”类。举个例子,我希望使用标签语法。感谢@xander解决“显式编写原始HTML”的问题,就是每次使用该表单时,您都必须自己编写标签。最好在模型上声明dedisplayname。这是一个非常古老的问题,但仍然与当前的MVC编码非常相关。到目前为止,提供的两种解决方案都存在问题,因此我添加了一个更详细的答案,涵盖了您可以使用的所有3个选项。是否有任何原因说明这在ASP.NET Core 3.1中不起作用?[Required]可以工作,但不能[DisplayName(“我的标签”)]请注意,如果构建控制器和视图,Visual Studio会做什么。它使用此处列出的三个选项中的第二个。您可以整天添加数据注释,但永远不会意识到它在.cshtml中被重写