MVC 4数据注释“显示”属性

时间:2012-10-04 20:54:16

标签: asp.net asp.net-mvc asp.net-mvc-4

我开始使用MVC 4(Razor视图引擎)。 (我相信这可能也适用于MVC 3及更早版本。)我想知道在视图中使用DisplayAttribute数据注释与直接在HTML中直接编写字符串是否有任何好处。例如,如果我有以下模型:

public class Thing
{
    public string WildAndCrazyProperty { get; set; }
}

......注释财产有什么好处:

    [Display(Name = "Wild and Crazy")]
    public string WildAndCrazyProperty { get; set; }

...并且我的标记是:

<html>
    <body>
        <div>@Html.DisplayNameFor(modelItem => modelItem.WildAndCrazyProperty)</div>
        <div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div>
    </body>
</html>

...与没有注释,并做:

<html>
    <body>
        <div>Wild and Crazy</div>
        <div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div>
    </body>
</html>

我在这种情况下没有提到Html.LabelFor的原因是因为该属性的数据在页面上显示为静态(即不可编辑的)文本。此页面上的数据永远不可编辑,因此我无需在第二个&lt; div&gt;中使用Html.TextBoxFor。然后使用Html.LabelFor将标签与该文本框正确关联。

5 个答案:

答案 0 :(得分:54)

如果两个不同的视图共享相同的模型(例如,可能一个用于移动输出,一个是常规的),那么将字符串驻留在一个位置可能会很好:作为ViewModel上的元数据。

此外,如果您的模型的继承版本需要不同的显示,那么它可能很有用。例如:

public class BaseViewModel
{
    [Display(Name = "Basic Name")]
    public virtual string Name { get; set; }
}

public class OtherViewModel : BaseViewModel
{
    [Display(Name = "Customized Inherited Name")]
    public override string Name { get; set; }
}

我承认这个例子非常人为......

这些是支持使用我可以提出的属性的最佳参数。我个人认为,在大多数情况下,这类事情最好留给标记。

答案 1 :(得分:13)

除了其他答案之外,当您想要本地化字段时,使用DisplayAttribute会有很大的好处。您可以使用DisplayAttribute在本地化数据库中查找名称,它将使用您希望的任何翻译。

此外,您可以让MVC使用Html.EditorForModel()为您生成模板,它会为您生成正确的标签。

归根结底,这取决于你。但是MVC非常“以模型为中心”,这就是数据属性应用于模型的原因,因此元数据存在于一个地方。这不是你需要做的大量额外打字。

答案 2 :(得分:8)

其中一个好处是您可以在多个视图中使用它并具有一致的标签文本。它也被asp.net MVC脚手架用于生成标签文本,并使生成有意义的文本更容易

[Display(Name = "Wild and Crazy")]
public string WildAndCrazyProperty { get; set; }
无论您在应用程序中使用该属性,

“Wild and Crazy”都会一直显示。

有时这不灵活,因为您可能希望在某些视图中更改文本。在这种情况下,您将必须使用自定义标记,如第二个示例

答案 3 :(得分:0)

也国际化。

一段时间前,我无所事事。在我的模型中这样做了吗?

        [Display(Name = "XXX", ResourceType = typeof(Labels))]

对于所有资源都有一个单独的类库。所以我有Labels.resx,Labels.culture.resx等。

无论如何,在那里我有key = XXX,value =“在这种文化中有意义的字符串”

答案 4 :(得分:-1)

我认为一种用途是您可以重命名您的财产,所有用途都会立即更新。