2011-11-11 8 views
0

私はデータベースからモデルのインデックスを提示するために使用しているモデルを持っており、スペースが必要な行の一部に表示名を付けました(つまり、dbのweekstartingには「Week Starting」の表示名)。@ Html.LabelForおよびW3C Validatorと競合していますか?

だから私はこのように私のモデルの表示名を設定:

[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を交換することができたと思います...ハードコードフィールド名のために私はする必要がありますか?

答えて

1

label要素を挿入しています。これは、ページの有効な入力に対応する必要があります。 (a)LabelForを使わずに直接テキストを出力する、(c)labelにラップせずにモデルからラベルテキストを抽出するカスタムヘルパーを作成する、または(d)ラップ解除するクライアント上でjavascriptを使って(検証をパスするが、スクリプトを実行した後にのみ)

(c)に役立つLabelForコードに基づく拡張です。テストされていない。

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); 
     } 
} 
+0

ありがとうtvanfosson、試してみる – DevDave

+1

あなたが望むのであれば、それは実際にはTHを生成することができることに注意してください。その場合、単にTagBuilderを使って 'TH'を構築し、' headerText'をタグのInnerTextとして追加します。ただし、HTML属性を受け入れるためにシグネチャを変更する必要があります。その場合、コードを追加する必要があります。どのように動作させるかについては、http://codeplex.com/aspnetのMVCソースコードを参照してください。 – tvanfosson

1

それは単なるケースの問題ですか?あなたの行:

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

には「Weekstarting」が含まれていますが、実際のプロパティは「WeekStarting」と呼ばれています。

+0

申し訳ありませんが、私はここにコードを入力する間違いをしていません。しかし、よく目撃された! +1! – DevDave

関連する問題