与@ Html.LabelFor和W3C Validator发生冲突?

时间:2011-11-11 17:35:32

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

我有一个模型用于从数据库中显示模型的索引,并为其中可能需要空格的某些行指定了显示名称(即,db中的“weekstarting”)显示名称为“Week Starting”。)

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

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

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

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

以上一切正常。但我正在使用W3C验证器,它给出了我给出的示例:

  

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

原谅我,如果这是显而易见的,但我在这里做错了什么?我没有使用表单我只是在表格中显示项目索引。我试图寻找答案,并看到有人建议表单控件被引用需要ID(即使我没有使用表单)但这不适用于此实例,因为如果我尝试设置id它将与索引中的每个项目重复的索引:

  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 ...用于硬代码字段名称,但我必须这样做吗?

2 个答案:

答案 0 :(得分:1)

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

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

label

答案 1 :(得分:1)

这只是一个案例问题吗?你的行:

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

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