Конфликт с @ Html.LabelFor и W3C Validator? - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть модель, которую я использую для представления индекса модели из базы данных, и я дал отображаемое имя для некоторых строк, в которых могут быть пробелы (т. Е. Будет дан «недельный запуск» в БД отображаемое имя «Начало недели»).

Итак, я установил отображаемое имя для моей модели так:

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

и затем в заголовках таблицы для моей таблицы я использую следующую строку кода, чтобы отобразить имя поля с использованием его отображаемого имени:

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

Выше все работает отлично. Но я использую валидатор W3C, и он дает мне следующую ошибку для примера, который я привел:

Атрибут for элемента label должен ссылаться на элемент управления формы.

Простите, если это очевидно, но что я здесь не так делаю? Я не использую форму, я просто отображаю индекс элементов в таблице. Я попытался найти ответ и увидел, что кто-то предположил, что элементам управления формы, на которые ссылаются, нужны идентификаторы (даже если я не использую форму), но это не будет применимо в этом случае, потому что, если я попытался установить идентификатор в Индекс будет дублироваться с каждым элементом в индексе:

  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 ]

1 голос
/ 11 ноября 2011

Это просто вопрос дела?Ваша строка:

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

содержит 'Weekstarting', тогда как фактическое свойство называется 'WeekStarting'.

1 голос
/ 11 ноября 2011

Это вставка элемента label, который должен соответствовать действительному вводу на странице. Вы можете (а) либо не беспокоиться об этом, (б) вывести текст напрямую без использования LabelFor, (в) написать собственный помощник, который извлекает текст метки из модели, не заключая его в 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 );
      }
}
...