web-dev-qa-db-ja.com

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

ASP.NET MVCは、HTMLヘルパーを使用して、@Html.ActionLink()@Html.BeginForm()などのHTML要素を生成できます。

匿名オブジェクト を作成してフォーム属性を指定し、そのオブジェクトを(この場合は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">でラップしたりすることもできますが、それがどのように行われるかを知りたいと思っています。

187
Adrian Grigore

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

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

VB.NETの場合 この構文は次のようになります ドット.を使用して実現されます。この言語では、 all匿名型

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

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

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

3
Tim