【问题标题】:LabeFor doesn't generate display-lable class attributeLabeFor 不生成显示标签类属性
【发布时间】:2012-03-29 22:44:29
【问题描述】:

一个新的 MVC 项目包括一个 Site.css,它指定:

/* Styles for editor and display helpers
----------------------------------------------------------*/
.display-label, 
.editor-label 
{
    font-weight: bold;
    margin: 1em 0 0 0;
}

但是,当我使用LabelFor(m=>m.SomeField) 时,生成的 html 不包含 class 属性:

<label for="SomeField">Some Field</label>

我见过人们使用 LabelFor 的其他示例,并且生成的 html 确实包含 class="display-label" 属性。

LabelFor 是否应该生成此类属性?如果是这样,为什么我的不是?

我确实连接了一个自定义 DataAnnotationsModelMetadataProvider,但它仍在调用基础:

protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
    var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);

    if (metadata.DisplayName == null)
        metadata.DisplayName = propertyName.ToTitleCaseFromCamel();

    return metadata;
}

【问题讨论】:

    标签: css asp.net-mvc model-view-controller


    【解决方案1】:

    这些 css 类仅在您使用 EditorFor 和 DisplayFor 模板时才会出现。仅使用 LabelFor 时,您需要提供自己的 css 类。

    【讨论】:

    • 谢谢,原来那些也不会生成类引用,但在查看您的答案时,我意识到它实际上是脚手架的一部分,而不是 Html Helpers。
    【解决方案2】:

    Rossis 让我查看了我的一个 Create 页面以验证他的说法。由于对 EditorFor 和 DisplayFor 的调用似乎也没有在我的项目中使用任何这些 css 类。我开始探索我的一些创建/编辑页面生成的 HTML 并找到了答案。

    这些类仅在通过脚手架选项生成的视图中使用:

    <div class="editor-label">
                @Html.LabelFor(model => model.MeetingDate)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.MeetingDate)
                @Html.ValidationMessageFor(model => model.MeetingDate)
            </div>
    

    因此您可以看到生成的页面明确引用了 css 类。它不是从 LabelFor Html 帮助程序调用生成的。所以类引用是脚手架的结果,而不是 Html 助手的结果。

    因此,我必须在从头开始编写代码的视图中明确引用它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 2012-07-12
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多