asp.net mvcでハイフネーションされたhtml属性


111

ハイフネーションされた属性を持つ要素を作成するときに、より良い構文はありますか:

<%= Html.TextBox ("name", value, new Dictionary<string, object> { {"data-foo", "bar"} }) %>

提案された標準HTML 5およびWIA ARIAのHTML仕様を見ると、HTML 属性のハイフンは、ある種の単純な名前間隔としてより一般的になるように計画されているようです。

たとえば、HTML 5はカスタム属性にプレフィックスを付けることを提案しdata-、WIA ARIAはaria-すべてのWIA ARIA属性のプレフィックスを使用します。

<%= Html.TextBox("name", value, new { attribute = attributeValue }) %>匿名オブジェクトなどのASP.NET MVCでHTMLヘルパーを使用すると、辞書に変換されます。

残念ながら、C#では名前のハイフンはサポートされていないため、唯一の選択肢は辞書を作成することです。構文が非常に冗長ですが、拡張機能全体を書き直さなくても、ASP.NET MVCのHTML拡張機能を変更するための優れた代替手段または簡単な方法を誰かが見たことがありますか?

回答:


202

データ属性名にアンダースコアを使用すると、魔法のように処理され、ハイフンに変換されます。アンダースコアはhtml属性名では無効であるため、アンダースコアではなくハイフンが必要であることがわかります。

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %>

2
私はいくつかのSOの質問で同様の問題を見つけましたが、これが最良の答えです。
user2780436 2015年

ステートメントのアンダースコアがhtml属性では有効でない理由を追加していただけませんかhtml 4.01以上の状態属性値には、文字(azおよびAZ)、数字(0-9)、ハイフン(ASCII 10進数45)、ピリオド(ASCII 10進数46)、アンダースコア(ASCII 10進数95)、およびコロン( ASCII 10進数58)
サーフマッグル2015

@threeFourOneSixOneThreeあなたの引用は属性値を参照していますが、この質問では属性名を参照しています。
ED-209

@threeFourOneSixOneThree回答の終わりを「アンダースコアはhtml属性名では有効ではない」に変更しました
ED-209

19

ActionLink htmlAttributesで提供される答えは、ハイフンの代わりにアンダースコアを使用することを提案しています。MVC.Netは、ページをブラウザーに送信するときに、アンダースコアの代わりにハイフンを出力することになっています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.