MVCのHTMLヘルパーによって生成されたHTML要素にクラス属性を追加するにはどうすればよいですか?


188

ASP.NET MVCは、例えば、HTMLヘルパーを使用してHTML要素を生成することができ@Html.ActionLink()@Html.BeginForm()そしてそうで。

匿名オブジェクトを作成してフォーム属性を指定し、そのオブジェクトを(この場合は4番目の)htmlAttributesパラメータに渡してid、要素にを指定できることを知っています。

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { id = "MyForm"})

しかし、class属性はどうですか?明らかにこれは機能しません:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { class = "myclass"})

私のビューが要求されたときにランダムな構文エラーがスローされるのは、C#キーワードが検出された後、他のものが期待されるためですclass

私も試しました:

new { _class = "myclass"}

そして

new { class_ = "myclass"}

ただし、アンダースコアがダッシュに置き換えられるため、これらも機能しませんでした。

HTML要素を手動で記述したり、フォームを内にラップしたり<div class="myClass">できることはわかっていますが、それがどのように行われるべきかを知りたいと思っています。

回答:


348

C#で名前として予約済みキーワードを持つプロパティを使用して匿名型(または任意の型)を作成するには、プロパティ名の前にアットマークを付け@ます。

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { @class = "myclass"})

VB.NETの場合、この構文はドットを使用して実行されます。ドットは.、その言語ではすべての匿名型のデフォルトの構文です。

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" })

IMOパーサーは、コード内のその時点でのコンテキストを考慮してヒントを必要とする場合、十分スマートではありません。
toddmo 2017年

3

CSS開発の現在のベストプラクティスは、Webサイト全体に可能な限り広く適用できる修飾子を使用してより一般的なセレクターを作成することです。個々のページ要素に個別のスタイルを定義しないようにします。

<form/>要素のCSSクラスの目的がフォーム内の要素のスタイルを制御することである場合、<fieldset/>ASP.NET MVCによって生成されたWebページでフォームをデフォルトでカプセル化する既存の要素にクラス属性を追加できます。フォーム上のCSSクラスが必要になることはほとんどありません。


4
あなたは確かに正しいですが、このケースは異なります。いくつかのjqueryプラグインのメタデータを指定する方法を探していました。これは通常、クラス属性を誤用することによって行われます。
エイドリアン・グリゴール

13
ベストプラクティスを提案できますが、フォームでcssを使用するテンプレートがある場合、テンプレートを肉屋にして「正しい」ものにするつもりはありません。現実は、CSSで正しいことをしたので、顧客がそれ以上支払うことはありません...
クリスチャンペイン

1
@ChristianPayneあなたがしなかったので、彼らは将来より多くを支払うことを強いられるかもしれません。
Ian Warburton、2015

1
この質問には回答しないため、この回答には反対票を投じました。より適切な答えは、最初に質問に答え、次にベストプラクティスのガイダンスを提供します。
Ben
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.