【问题标题】:Why should I use LabelFor in MVC?为什么要在 MVC 中使用 LabelFor?
【发布时间】:2013-10-29 23:04:41
【问题描述】:

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

例如。

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

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

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

【问题讨论】:

    标签: asp.net-mvc html-helper html.labelfor


    【解决方案1】:

    好吧,如果你已经像这样使用DisplayNameAttribute 装饰了你的模型:

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

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

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

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

    这也意味着您将拥有更多强类型视图。如果您必须输入很多类似"FirstName" 的字符串,很容易对它进行粗手指操作,但使用辅助方法可以让编译器在大多数情况下捕捉到此类错误。

    【讨论】:

    • View - ViewModel 的关系不应该是一对一的吗?在这种情况下,无论是在 View 还是 ViewModel 中,您仍然需要多次键入它。
    • @Jamie 通常不会这样。一方面,您可能会有不同的视图来显示和编辑数据。此外,您可能需要在整个应用中的其他位置添加 LabelForDisplayNameFor
    • 使用 DisplayNameFor 比 LabelFor 有什么优势?
    • @Jamie DisplayNameFor 只返回字符串而不是 HTML 标签。例如,如果您想在用户将鼠标悬停在元素上时将其放入 title 属性中,您就需要它。
    • 感谢@p.s.w.g 提供的信息
    【解决方案2】:

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

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

    没有可以使用,但它有它的用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多