37

为什么我应该使用LabelFor而不是<label>

例如。

@Html.LabelFor(model => model.FirstName)
@Html.DisplayFor(model => model.FirstName)

对比

<label for="FirstName">First Name</label>
@Html.DisplayFor(model => model.FirstName)

除上述内容外,@pswg 还涵盖了该问题的 DRY 方面。我也想知道它是否有助于本地化。IE。基于当前语言设置的不同标签。

4

2 回答 2

50

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

[DisplayName("First Name")]
string FirstName { get; set; }

然后,您只需在一个地方指定标签的文本。您可能需要在多个位置创建类似的标签,如果您需要更改标签的文本,只需执行一次会很方便。

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

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

这也意味着您将拥有更多强类型的视图。"FirstName"如果您必须键入很多字符串,那么很容易对字符串进行粗手指,但是使用辅助方法将允许编译器在大多数情况下捕获此类错误。

于 2013-10-29T23:07:29.830 回答
5

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

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

不一定使用,但它有它的用途。

于 2013-10-29T23:08:07.280 回答