Versi pratinjau Asp.Net MVC 2.0 menyediakan pembantu seperti
Html.EditorFor(c => c.propertyname)
Jika nama properti adalah string, kode di atas membuat texbox.
Bagaimana jika saya ingin meneruskan properti MaxLength dan Size ke kotak teks atau properti kelas css saya sendiri?
Apakah saya perlu membuat satu template untuk setiap kombinasi ukuran dan panjang dalam aplikasi saya? Jika demikian, itu tidak membuat templat default dapat digunakan.
c#
asp.net-mvc
asp.net-mvc-2
Chandmk
sumber
sumber
Saya menyelesaikan ini dengan membuat EditorTemplate bernama String.ascx di folder / Views / Shared / EditorTemplates saya:
Dalam pandangan saya, saya menggunakan
Bekerja seperti pesona bagi saya!
sumber
Tidak ada jawaban di utas ini atau lainnya tentang menyetel atribut HTML untuk @ Html.EditorFor yang sangat membantu saya. Namun, saya menemukan jawaban yang bagus di
Styling helper @ Html.EditorFor
Saya menggunakan pendekatan yang sama dan itu bekerja dengan baik tanpa menulis banyak kode tambahan. Perhatikan bahwa atribut id dari keluaran html dari Html.EditorFor disetel. Kode tampilan
Properti model dengan anotasi data dan format tanggal sebagai "dd MMM yyyy"
Bekerja seperti pesona tanpa menulis banyak kode tambahan. Jawaban ini menggunakan ASP.NET MVC 3 Razor C #.
sumber
Mungkin ingin melihat postingan Blog Kiran Chand , dia menggunakan metadata khusus pada model tampilan seperti:
Ini digabungkan dengan template khusus yang menggunakan metadata. Pendekatan yang bersih dan sederhana menurut saya, tetapi saya ingin melihat kasus penggunaan umum ini ada di dalam mvc.
sumber
EditorFor
meneruskannya sebagai:new { htmlAttributes: { @class = "yourclass" } }
Saya terkejut tidak ada yang menyebutkan menyampaikannya di "additionalViewData" dan membacanya di sisi lain.
Lihat (dengan jeda baris, untuk kejelasan):
Template editor:
sumber
Masalahnya adalah, template Anda bisa berisi beberapa elemen HTML, jadi MVC tidak akan tahu mana yang akan menerapkan ukuran / kelas Anda. Anda harus mendefinisikannya sendiri.
Buat template Anda berasal dari kelas Anda sendiri yang disebut TextBoxViewModel:
}
Di template Anda dapat melakukan ini:
Dalam pandangan Anda, Anda melakukan:
Formulir pertama akan membuat template default untuk string. Formulir kedua akan membuat template kustom.
Sintaks alternatif menggunakan antarmuka yang lancar:
}
Perhatikan bahwa alih-alih melakukan ini dalam tampilan, Anda juga dapat melakukan ini di pengontrol, atau jauh lebih baik di ViewModel:
Juga perhatikan bahwa Anda dapat membuat kelas TemplateViewModel dasar - dasar yang sama untuk semua templat tampilan Anda - yang akan berisi dukungan dasar untuk atribut / dll.
Tapi secara umum saya rasa MVC v2 membutuhkan solusi yang lebih baik. Ini masih Beta - tanyakan saja ;-)
sumber
Saya pikir menggunakan CSS adalah cara terbaik. Saya berharap saya bisa berbuat lebih banyak dengan pengkodean .NET, seperti di XAML, tetapi di browser CSS adalah rajanya.
Site.css
.cshtml
Joe
sumber
EditorFor
template. Saya menggunakan MVC4 dan ini bekerja dengan baik.Seperti di MVC 5, jika Anda ingin menambahkan atribut apa pun, Anda dapat melakukannya
Informasi ditemukan dari blog ini
sumber
Anda dapat menentukan atribut untuk properti Anda.
Ini dikenal sebagai
System.ComponentModel.DataAnnotations
. Jika Anda tidak dapat menemukanValidationAttribute
yang Anda butuhkan, Anda selalu dapat menentukan atribut khusus.Salam Hormat, Carlos
sumber
Ini mungkin bukan solusi paling licin, tetapi langsung saja. Anda dapat menulis ekstensi ke kelas HtmlHelper.EditorFor. Dalam ekstensi itu, Anda dapat menyediakan parameter opsi yang akan menulis opsi ke ViewData untuk helper. Berikut beberapa kode:
Pertama, metode ekstensi:
Selanjutnya, objek opsi:
Dan terakhir, inilah baris dari template String.ascx:
Sejujurnya, saya pikir ini mudah dan jelas bagi jiwa malang yang harus menjaga kode Anda di jalan. Dan mudah untuk memperluas berbagai bit info lain yang ingin Anda teruskan ke template Anda. Ini bekerja dengan baik sejauh ini untuk saya dalam sebuah proyek di mana saya mencoba untuk membungkus sebanyak yang saya bisa dalam satu set template untuk membantu menstandarkan html sekitarnya, a la http://bradwilson.typepad.com/blog/2009/ 10 / aspnet-mvc-2-templates-part-5-master-page-templates.html .
sumber
Saya menulis entri blog untuk menjawab pertanyaan saya sendiri
Menambahkan dukungan atribut html untuk Template - ASP.Net MVC 2.0 Beta
sumber
Saya tidak tahu mengapa itu tidak berfungsi untuk Html.EditorFor tetapi saya mencoba TextBoxFor dan itu berhasil untuk saya.
... dan juga validasi bekerja.
sumber
@class = "className"
Dalam praktik saya, saya menemukan bahwa yang terbaik adalah menggunakan EditorTemplates hanya dengan satu HtmlHelper di dalamnya - TextBox yang dalam banyak kasus. Jika saya menginginkan template untuk struktur html yang lebih kompleks, saya akan menulis HtmlHelper terpisah.
Mengingat bahwa kita bisa menempelkan seluruh objek ViewData di tempat htmlAttributes dari TextBox. Selain itu, kami dapat menulis beberapa kode penyesuaian untuk beberapa properti ViewData jika mereka memerlukan perlakuan khusus:
Di bawah ini adalah contoh sintaks dalam tampilan dan html yang dikeluarkan:
sumber
Karena pertanyaannya adalah untuk EditorFor, bukan TextBoxFor, saran WEFX tidak berfungsi.
Untuk mengubah kotak masukan individual, Anda dapat memproses keluaran metode EditorFor:
Dimungkinkan juga untuk mengubah SEMUA EditorFors Anda karena ternyata MVC menetapkan kelas kotak teks EditorFor dengan .text-box , oleh karena itu Anda dapat mengganti gaya ini, di lembar gaya atau di halaman.
Selain itu, Anda dapat mengatur gayanya
sumber
Saya juga memiliki masalah dengan pengaturan lebar TextBox di MVC3, sementara pengaturan atribut Clsss berfungsi untuk kontrol TextArea tetapi tidak untuk kontrol TextBoxFor atau kontrol EditorFor:
Saya mencoba mengikuti & itu berhasil untuk saya:
@ Html.TextBoxFor (model => model.Title, baru {Class = "textBox", style = "width: 90%;"})
juga dalam hal ini Validasi bekerja dengan sempurna.
sumber
Salah satu cara Anda bisa mengatasinya adalah dengan memiliki delegasi pada model tampilan untuk menangani pencetakan rendering khusus seperti ini. Saya telah melakukan ini untuk kelas paging, saya mengekspos properti publik pada model
Func<int, string> RenderUrl
untuk menghadapinya.Jadi tentukan bagaimana bit kustom akan ditulis:
Keluarkan tampilan untuk
Paging
kelas:... dan untuk tampilan sebenarnya
Paging
:Ini bisa dilihat sebagai masalah yang terlalu rumit tetapi saya menggunakan pager ini di mana-mana dan tidak tahan melihat kode boilerplate yang sama untuk membuatnya ditampilkan.
sumber
UPDATE: hm, jelas ini tidak akan berfungsi karena model dilewatkan oleh nilai sehingga atribut tidak dipertahankan; tapi saya tinggalkan jawaban ini sebagai ide.
Solusi lain, menurut saya, adalah menambahkan pembantu TextBox / etc Anda sendiri, yang akan memeriksa atribut Anda sendiri pada model.
Yang ini lebih mudah tetapi tidak begitu nyaman / fleksibel.
sumber
Ini adalah cara terbersih dan paling elegan / sederhana untuk mendapatkan solusi di sini.
Posting blog yang brilian dan tidak ada kekacauan yang berlebihan dalam menulis metode ekstensi / penolong kustom seperti profesor gila.
http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx
sumber
Saya sangat menyukai jawaban @tjeerdans yang menggunakan EditorTemplate bernama String.ascx di folder / Views / Shared / EditorTemplates. Sepertinya ini adalah jawaban paling langsung untuk pertanyaan ini. Namun, saya ingin template menggunakan sintaks Razor. Selain itu, tampaknya MVC3 menggunakan template String sebagai default (lihat pertanyaan StackOverflow " template tampilan mvc untuk string digunakan untuk bilangan bulat ") sehingga Anda perlu menyetel model ke objek daripada string. Template saya sepertinya berfungsi sejauh ini:
sumber
Saya menyelesaikannya !!
Untuk Razor sintaksnya adalah:
@Html.TextAreaFor(m=>m.Address, new { style="Width:174px" })
ini menyesuaikan lebar area teks dengan lebar yang saya tentukan dalam parameter gaya.Untuk ASPx sintaksnya adalah:
<%=Html.TextAreaFor(m => m.Description, new { cols = "20", rows = "15", style="Width:174px" })%>
ini akan melakukan trik
sumber