2013-10-29 399 views
30

为什么我应该使用LabelFor而不是<label>为什么要在MVC中使用LabelFor?

例如。

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

VS

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

除上述之外, @ p.s.w.g已覆盖了这一问题的DRY方面。我也想知道它是否有助于本地化。即。基于当前语言设置的不同标签。

回答

40

好吧,如果你受够了这种DisplayNameAttribute这样的装饰了你的机型:

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

那么你就只能指定标签的文本将是在一个地方的东西。您可能需要在多个位置创建一个类似的标签,并且如果您需要更改标签的文本,则只需执行一次即可。

如果要本地化为不同的语言,您可以用DisplayAttribute做你的应用程序,这更重要的是:

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

这也意味着你将有更多的强类型的意见。如果你必须输入很多字符,就很容易使用像"FirstName"这样的字符串,但是使用助手方法可以让编译器在大多数时候捕获这样的错误。

+1

View-ViewModel关系不应该是一对一吗?在这种情况下,无论View或ViewModel中是多少次都需要输入。 – Jamie

+3

@Jamie它通常不会那样工作。首先,你可能会有不同的观点来显示和编辑数据。此外,您可能需要在整个应用的其他位置投放“LabelFor”或“DisplayNameFor”。 –

+0

使用DisplayNameFor的LabelFor的优点是什么? – Jamie

4

LabelFor允许您控制视图模型中的所有内容,而无需担心控件。假设你在2个地方使用相同的视图模型,这意味着你可以在一个地方更改名称来更新所有控件。

不是被使用,但它有它的用途。