Saya mencoba menambahkan kelas ke input.
Ini tidak bekerja:
@Html.EditorFor(x => x.Created, new { @class = "date" })
asp.net-mvc
asp.net-mvc-3
razor
pengguna137348
sumber
sumber
Jawaban:
Menambahkan kelas ke
Html.EditorFor
tidak masuk akal karena di dalam templatnya Anda bisa memiliki banyak tag berbeda. Jadi, Anda perlu menetapkan kelas di dalam template editor:dan di templat khusus:
sumber
Pada ASP.NET MVC 5.1, menambahkan kelas ke suatu
EditorFor
dimungkinkan (pertanyaan awal yang ditentukan ASP.NET MVC 3, dan jawaban yang diterima masih yang terbaik dengan yang dipertimbangkan).Lihat: Apa yang Baru di ASP.NET MVC 5.1, dukungan Bootstrap untuk template editor
sumber
Anda tidak dapat mengatur kelas untuk EditorFor generik. Jika Anda tahu editor yang Anda inginkan, Anda dapat menggunakannya langsung, di sana Anda dapat mengatur kelas. Anda tidak perlu membuat template khusus apa pun.
sumber
Kamu bisa memakai:
(Setidaknya dengan ASP.NET MVC 5, tapi saya tidak tahu bagaimana itu dengan ASP.NET MVC 3.)
sumber
Saya memiliki masalah frustasi yang sama, dan saya tidak ingin membuat EditorTemplate yang berlaku untuk semua nilai DateTime (ada waktu di UI saya di mana saya ingin menampilkan waktu dan bukan kalender drop-down jQuery UI ). Dalam penelitian saya, masalah utama yang saya temui adalah:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
, tetapi itu tidak akan memungkinkan saya untuk menerapkan kelas "pemilih tanggal" kustom.Oleh karena itu, saya membuat kelas HtmlHelper khusus yang memiliki manfaat berikut:
Metode ini menggantikannya dengan string kosong.
Dan bagi mereka yang ingin mengetahui sintaks JQuery yang mencari objek dengan
date-picker
dekorasi kelas untuk kemudian membuat kalender, ini dia:sumber
DateTimePickerFor
dan memperbarui bidang tanggal model yang Anda wakili dengan[DataType(DataType.Date)]
atau[DataType(DataType.DateTime)]
? Anda juga dapat memasukkannya ke, katakanlah, dalam bentuk bb / hh / tttt dengan.ParseFormats(new string[] { "MM/dd/yyyy" })
(atau memodifikasinya dengan apa pun yang Anda inginkan, dengan mudah). Jika itu nol, bidang ini akan mengosongkannya tanpa harus@MyHtmlHelpers.CalenderTextBoxFor(model => model.ExpirationDate)
. Ada ide tentang cara mengimplementasikan ini?Dimungkinkan untuk memberikan kelas atau informasi lain melalui AdditionalViewData - Saya menggunakan ini di mana saya mengizinkan pengguna untuk membuat formulir berdasarkan bidang basis data (propertyName, editorType, dan editorClass).
Berdasarkan contoh awal Anda:
dan di templat khusus:
sumber
Tidak ada
EditorFor
override yang memungkinkan Anda meneruskan objek anonim yang propertinya entah bagaimana akan ditambahkan sebagai atribut pada beberapa tag, terutama untuk templat editor bawaan. Anda harus menulis template editor khusus Anda sendiri dan memberikan nilai yang Anda inginkan sebagai data view tambahan.sumber
tidak mengizinkan argumen apa pun untuk diteruskan ke kotak Teks
Ini adalah bagaimana Anda dapat menerapkan atribut.
sumber
Menggunakan jQuery, Anda dapat melakukannya dengan mudah:
Ini adalah tag input Anda
Untuk DropDownlist Anda dapat menggunakan ini:
Untuk Dropdownlist:
sumber
Sementara pertanyaannya ditargetkan pada MVC 3.0, kami menemukan masalah tetap ada di MVC 4.0 juga. MVC 5.0 sekarang termasuk kelebihan bawaan untuk htmlAttributes.
Saya terpaksa menggunakan MVC 4.0 di tempat kerja saya saat ini dan perlu menambahkan kelas css untuk integrasi JQuery. Saya memecahkan masalah ini menggunakan metode ekstensi tunggal ...
Metode ekstensi:
Penggunaan Markup HTML:
(Pastikan untuk memasukkan namespace metode ekstensi dalam tampilan pisau cukur)
Penjelasan: Idenya adalah untuk menyuntikkan ke HTML yang ada. Saya memilih untuk mem-parsing elemen saat ini menggunakan Linq-to-XML using
XDocument.Parse()
. Saya melewatkan htmlAttributes sebagai tipeobject
. Saya menggunakan MVCRouteValueDictionary
untuk mem-parsing htmlAttribut yang diteruskan. Saya menggabungkan atribut di mana mereka sudah ada, atau menambahkan atribut baru jika belum ada.Jika input tidak dapat diuraikan oleh
XDocument.Parse()
saya meninggalkan semua harapan dan mengembalikan string input asli.Sekarang saya dapat menggunakan manfaat DisplayFor (merender tipe data seperti mata uang secara tepat) tetapi juga memiliki kemampuan untuk menentukan kelas css (dan atribut lainnya dalam hal ini). Dapat membantu untuk menambahkan atribut seperti
data-*
, ataung-*
(Sudut).sumber
Anda dapat membuat perilaku yang sama dengan membuat editor kustom sederhana bernama DateTime.cshtml, menyimpannya di Views / Shared / EditorTemplates
dan dalam pandangan Anda
Perhatikan bahwa dalam contoh saya, saya mengkodekan dua kelas css dan format tanggal. Anda tentu saja dapat mengubahnya. Anda juga dapat melakukan hal yang sama dengan atribut html lainnya, seperti hanya baca, dinonaktifkan, dll.
sumber
Saya menggunakan solusi lain menggunakan pemilih atribut CSS untuk mendapatkan apa yang Anda butuhkan.
Tunjukkan atribut HTML yang Anda kenal dan masukkan ke dalam gaya relatif yang Anda inginkan.
Seperti di bawah ini:
sumber
Tidak perlu membuat template khusus untuk MVC 4. Gunakan TextBox alih-alih EditUntuk di sini atribut html khusus tidak didukung, hanya didukung dari MVC 5. TextBox harus mendukung untuk MVC 4, saya tidak tahu tentang versi lain.
sumber
Anda juga bisa melakukannya melalui jQuery:
sumber
Saya hanya perlu mengatur ukuran satu kotak teks pada satu halaman. Atribut pengkodean pada model dan membuat templat editor kustom terlalu banyak, jadi saya hanya membungkus panggilan @Html.EditorFor dengan tag rentang yang disebut kelas yang menentukan ukuran kotak teks.
Deklarasi kelas CSS:
Lihat kode:
sumber
Salah satu cara terbaik untuk menerapkan kelas ke
@Html.EditorFor()
dalam MVC3 RAzor adalahIni akan menambah gaya di atas untuk Anda
EditorFor()
Ini berfungsi untuk MVC3.
sumber