2011-02-03 10 views
28

WebGridヘルパーを使用してレンダリングされるテーブルにカスタムHTML5データ属性を追加しようとすると、問題が発生します。次のように私は、テーブルタグの外観をしたい:ここMVC3 WebGridヘルパーを使用してhtml属性名にハイフンを追加する

<table data-test="testdata"><!-- Table Content --></table> 

はレイザー・ビュー・エンジンを使用したサンプル図である:「無効な匿名型のメンバ宣言子」

@{ 
    var myUser = new 
    { 
     Id = 1, 
     Name = "Test User" 
    }; 

    var users = new[] { myUser }; 

    var grid = new WebGrid(users); 
} 
@grid.GetHtml(htmlAttributes: new { data-test = "testdata"}) 

最後の行が生成されますエラーは、データテストのハイフンのためです。

その他の入力HtmlHelpersでは、ハイフンの代わりにアンダースコアを使用でき、レンダリング時に自動的にハイフンに変更されます。これはWebGridでは発生しません。

私はhtmlAttributesのための辞書に渡す場合:

@grid.GetHtml(htmlAttributes: new Dictionary<string, object> {{ "data-test", "testdata"}}) 

テーブルは、次のようなレンダリングされる:

<table Comparer="System.Collections.Generic.GenericEqualityComparer`1[System.String]" Count="1" Keys="System.Collections.Generic.Dictionary`2+KeyCollection[System.String,System.Object]" Values="System.Collections.Generic.Dictionary`2+ValueCollection[System.String,System.Object]"><!-- Table Content --></table> 

私が間違って何をやっていると私は、必要に応じて属性をレンダリング何をすべきでしょうか?

+0

属性名の前に '@'を置くとどうなりますか? 'class'が特別なので' @ class'と打つ必要があるクラスの属性を追加したい場合、これはあなたの特別な属性にも当てはまりますか? –

+0

@を前に置くのは、そこに置かないのと同じ動作です。 –

答えて

43

私はこれが可能ではないと恐れています。残念ながら、WebGridが、それは、そのようなTextBoxForどこにできる限り標準のHTMLヘルパーと同じ構文をサポートしていません:

@Html.TextBoxFor(x => x.SomeProp, new { data_test = "testdata" }) 

とアンダースコアが自動的にダッシュに変換されるだろう。

+12

残念なことに、Html.BeginForm()では、このように@Html.BeginForm( "view"、 "controller"、FormMethod.Post、new Dictionary {{"data-テスト "、"テストデータ "}})) – Korayem

+0

素晴らしい人:) –

関連する問題