Ken*_* K. 47 asp.net asp.net-mvc asp.net-mvc-4
我开始使用MVC 4(Razor视图引擎).(我相信这可能也适用于MVC 3及更早版本.)我想知道在视图中使用DisplayAttribute数据注释与直接在HTML中直接编写字符串是否有任何好处.例如,如果我有以下模型:
public class Thing
{
public string WildAndCrazyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
......注释财产会有什么好处:
[Display(Name = "Wild and Crazy")]
public string WildAndCrazyProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
......并且我的标记是:
<html>
<body>
<div>@Html.DisplayNameFor(modelItem => modelItem.WildAndCrazyProperty)</div>
<div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
...与没有注释,并做:
<html>
<body>
<div>Wild and Crazy</div>
<div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我Html.LabelFor
在这种情况下没有提到的原因是因为属性的数据在页面上显示为静态(即不可编辑的)文本.数据永远不会在此页面上编辑,因此我无需Html.TextBoxFor
在第二个<div>中使用,然后使用该Html.LabelFor
标签将标签与该文本框正确关联.
eou*_*3hf 57
如果两个不同的视图共享相同的模型(例如,可能一个用于移动输出而另一个是常规的),那么将字符串驻留在单个位置可能会很好:作为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; }
}
Run Code Online (Sandbox Code Playgroud)
我承认这个例子非常人为......
这些是支持使用我可以提出的属性的最佳参数.我个人认为,在大多数情况下,这类事情最好留给加价.
Eri*_*sch 14
除了其他答案之外,使用DisplayAttribute
何时想要本地化字段有很大的好处.您可以使用DisplayAttribute在本地化数据库中查找名称,它将使用您希望的任何翻译.
此外,您可以让MVC使用生成模板Html.EditorForModel()
,它将为您生成正确的标签.
最终,这取决于你.但是MVC非常"以模型为中心",这就是数据属性应用于模型的原因,因此元数据存在于一个地方.这不像是你需要做的大量额外打字.
其中一个好处是您可以在多个视图中使用它并具有一致的标签文本.它也被asp.net MVC脚手架用于生成标签文本,并使生成有意义的文本更容易
[Display(Name = "Wild and Crazy")]
public string WildAndCrazyProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
无论您在应用程序中使用该属性,"Wild and Crazy"都会始终显示.
有时这不灵活,因为您可能希望在某些视图中更改文本.在这种情况下,您将必须使用自定义标记,如第二个示例中所示
归档时间: |
|
查看次数: |
122128 次 |
最近记录: |