Bagaimana saya bisa menambahkan atribut kelas ke elemen HTML yang dihasilkan oleh Pembantu HTML MVC?

188

ASP.NET MVC dapat menghasilkan elemen HTML menggunakan HTML Helpers, misalnya @Html.ActionLink(), @Html.BeginForm()dan sebagainya.

Saya tahu saya bisa menentukan atribut formulir dengan membuat objek anonim dan meneruskan objek itu untuk htmlAttributesparameter (keempat dalam kasus ini) tempat menentukan idelemen untuk:

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

Tapi bagaimana dengan classatributnya? Jelas ini tidak berhasil:

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

Karena itu hanya melempar kesalahan sintaksis acak ketika tampilan saya diminta, karena mengharapkan sesuatu yang lain setelah menemukan kata kunci C # class.

Saya juga sudah mencoba:

new { _class = "myclass"}

dan

new { class_ = "myclass"}

Tetapi mereka juga tidak bekerja, karena garis bawah digantikan oleh tanda hubung .

Saya tahu bahwa saya bisa menulis elemen HTML dengan tangan atau membungkus formulir di dalam <div class="myClass">, tetapi saya masih tertarik untuk mengetahui bagaimana seharusnya dilakukan.

Adrian Grigore
sumber

Jawaban:

348

Dalam rangka untuk menciptakan jenis anonim (atau jenis) dengan properti yang memiliki kata kunci reserved sebagai nama di C #, Anda dapat menambah nama properti dengan tanda, @:

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

Untuk VB.NET sintaks ini akan diselesaikan menggunakan dot ., yang dalam bahasa itu adalah sintaks default untuk semua jenis anonim :

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" })
Komunitas
sumber
Pengurai tidak cukup pintar, IMO, jika perlu petunjuk yang diberikan konteks itu pada saat itu dalam kode.
toddmo
3

Praktik terbaik saat ini dalam pengembangan CSS adalah membuat penyeleksi yang lebih umum dengan pengubah yang dapat diterapkan seluas mungkin di seluruh situs web. Saya akan mencoba untuk menghindari mendefinisikan gaya terpisah untuk elemen halaman individual.

Jika tujuan kelas CSS pada <form/>elemen adalah untuk mengontrol gaya elemen dalam formulir, Anda bisa menambahkan atribut kelas <fieldset/>elemen yang ada yang merangkum bentuk apa pun secara default di halaman web yang dihasilkan oleh ASP.NET MVC. Kelas CSS pada formulir jarang diperlukan.

Tim
sumber
4
Anda memang benar, namun kasus ini berbeda. Saya sedang mencari cara untuk menentukan metadata untuk beberapa plugin jquery. Ini biasanya dilakukan dengan menyalahgunakan atribut class.
Adrian Grigore
13
Anda dapat menyarankan praktik terbaik, tetapi jika saya memiliki template yang menggunakan css pada formulir, saya tidak akan memotong template untuk membuatnya "benar". Kenyataannya adalah, seorang pelanggan tidak akan membayar lebih karena Anda melakukan hal yang benar dengan css ...
Christian Payne
1
@ChristianPayne Mereka mungkin dipaksa untuk membayar lebih di masa depan karena Anda tidak.
Ian Warburton
1
Saya memilih tanggapan ini karena tidak menjawab pertanyaan. Jawaban yang lebih tepat akan menjawab pertanyaan terlebih dahulu kemudian memberikan panduan praktik terbaik.
Ben