【问题标题】:Conflict with @Html.LabelFor and W3C Validator?与 @Html.LabelFor 和 W3C 验证器冲突?
【发布时间】:2011-11-11 17:35:31
【问题描述】:

我有一个模型,我用它来显示数据库中模型的索引,并为其中可能需要空格的某些行提供了显示名称,(即在 db 中将给出“weekstarting”显示名称为“Week Starting”)。

所以我像这样为我的模型设置显示名称:

 [DisplayName("Week Starting")]
    public DateTime WeekStarting { get; set; }

然后在我的表格的表格标题中,我使用以下代码行来使用给定的显示名称显示字段名称:

@Html.LabelFor(x => x.First().WeekStarting)

以上都可以正常工作。但我正在使用 W3C 验证器,它给我给出的示例如下错误:

标签元素的for属性必须引用表单控件。

如果很明显,请原谅我,但我在这里做错了什么?我没有使用表格,我只是在表格中显示项目的索引。我试图寻找答案,看到有人建议被引用的表单控件需要 ids(即使我没有使用表单)但这在这种情况下不适用,因为如果我试图在它将与索引中的每个项目重复的索引:

  foreach (var item in Model.Tbms)
{
<tr><td>@item.value</td><tr>.... would be repeated for each item, and also unsure where I would put the id in any case, the td?
}

或者有没有更好的方法来标记字段标题,首先使用我喜欢的显示名称?我想我可以将 @Html.LabelFor... 换成硬代码字段名称,但我必须这样做吗?

【问题讨论】:

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


    【解决方案1】:

    它正在插入一个label 元素,它应该对应于页面上的有效输入。您可以 (a) 不用担心,(b) 直接输出文本而不使用 LabelFor,(c) 编写一个自定义帮助程序,从模型中提取标签文本而不将其包装在 label 中,或者 ( d) 在客户端使用 javascript 解包(这将使其通过验证,但仅在运行脚本之后)。

    这是一个基于 LabelFor 代码的扩展,它应该有助于 (c)。未经测试。

     public static class HelperExtensions
     {
          public static MvcHtmlString TableHeaderFor<TModel,TValue)( this HtmlHelper<TModel> html, Expression<Func<TModel,TValue>> expression )
          {
               var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
               string headerText = metadata.DisplayName ?? metadata.PropertyName ?? ExpressionHelper.GetExpressionText(expression);
               return new MvcHtmlString( headerText );
          }
    }
    

    【讨论】:

    • 请注意,如果您愿意,您可以让它实际生成TH,我认为给定名称会更合适。在这种情况下,您只需使用 TagBuilder 来构造 TH 并将 headerText 添加为标签的 InnerText。不过,签名可能需要更改以接受 HTML 属性,然后您必须添加代码来处理它们。请参阅 codeplex.com/aspnet 上的 MVC 源代码,了解如何使其工作的想法。
    【解决方案2】:

    这只是一个案例问题吗?您的线路:

    @Html.LabelFor(x => x.First().Weekstarting)
    

    包含“Weekstarting”,而实际属性称为“WeekStarting”。

    【讨论】:

    • 不抱歉,不是我把代码放在这里的错误。虽然很好看! +1!
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2012-12-06
    • 2020-04-26
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多