我为什么要在MVC中使用LabelFor?

Jam*_*mie 35 asp.net-mvc html-helper html.labelfor

我为什么要用LabelFor而不是<label>

例如.

@Html.LabelFor(model => model.FirstName)
@Html.DisplayFor(model => model.FirstName)
Run Code Online (Sandbox Code Playgroud)

VS

<label for="FirstName">First Name</label>
@Html.DisplayFor(model => model.FirstName)
Run Code Online (Sandbox Code Playgroud)

除此之外,@ pswg已涵盖此问题的DRY方面.我还想知道它是否有助于本地化.即.基于当前语言设置的不同标签.

p.s*_*w.g 46

好吧,如果你用DisplayNameAttribute这样的装饰你的模型:

[DisplayName("First Name")]
string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后,您只需在一个位置指定标签文本的内容.您可能必须在多个位置创建类似的标签,如果您需要更改标签的文本,则只需执行一次即可.

如果您想要将应用程序本地化为不同的语言,这一点就更为重要,您可以使用以下方法DisplayAttribute:

[Display(Name = "FirstNameLabel", ResourceType = typeof(MyResources))]
string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

这也意味着你将拥有更强烈类型的视图."FirstName"如果你需要输入很多字符串就很容易指责字符串,但是使用辅助方法将允许编译器在大多数时候捕获这样的错误.

  • @Jamie它通常不会这样.首先,对于显示和编辑数据,您可能会有不同的视图.另外,您可能需要在整个应用程序的其他位置抛出`LabelFor`或`DisplayNameFor`. (3认同)

web*_*oob 5

LabelFor 允许您从视图模型中控制所有内容,而无需担心控件.

假设您在2个位置使用相同的视图模型,这意味着您可以在一个位置更改名称以更新所有控件.

不会被使用,但是它有它的用途.