Apakah mungkin saat menggunakan Html.TextBoxFor
untuk mengganti atribut nama?
Saya telah mencoba tetapi tidak berhasil. Saya perlu menggunakan TextBoxFor agar validasi sisi klien berfungsi, namun untuk alasan yang tidak saya bahas, saya memerlukan nama kotak teks agar berbeda dari yang dibuat.
Saya telah mencoba yang berikut ini:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
Yang berfungsi untuk ID tapi bukan nama. Apakah ini mungkin?
Pembaruan : Melihat kode untuk TextBoxFor. Sepertinya tidak ada cara yang mudah. Semoga seseorang bisa membuktikan saya salah.
c#
asp.net-mvc-3
razor
html-helper
Rob Stevenson-Leggett
sumber
sumber
Jawaban:
Rob, sebenarnya ada cara yang lebih sederhana. Sebagai ganti nama , gunakan Nama :
sumber
Name
hasil dalam dua atribut,Name
danname
, dan pengikat model menggunakanname
.Apakah Anda menanyakan ini karena Anda ingin menerapkan awalan pada nama? Jika demikian, Anda dapat melakukan ini dengan mengatur
ViewData.TemplateInfo.HtmlFieldPrefix
di Controller Anda.Saya belajar banyak tentang hal ini dari blog Brad Wilson .
sumber
EditorFor memiliki kelebihan beban di mana Anda dapat menyediakan
name
atribut sebagai parameter:sumber
Coba EditorFor . Anda bisa melewatkan string sebagai nama template jika Anda ingin memastikan textbox dirender meskipun tipe properti bukan string. Jika properti sudah berupa string, itu tidak perlu
templatename
secara eksplisit merender kotak teks, jadi Anda bisa lewatnull
. Perhatikan bahwa ini tidak memerlukan parameter id secara eksplisit, ini akan menyimpulkannya dari nama elemen. Dan semua validasi masih aktif dengan EditorForsumber
Jawaban ben memberi saya apa yang saya cari kecuali Anda harus membungkusnya dalam Html.Raw
sumber
Ini disebut Microsoft GOTCHA
Gunakan nama dengan huruf kapital, seperti ini
sumber
sedikit "unpretty" =), coba:
sumber
Bagi saya, itu berhasil! Saya berharap bantuan itu!
sumber
Tidak yakin mana dari dua parameter string di tengah yang berfungsi, tetapi hanya berfungsi ketika saya mengetik keduanya.
sumber
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);
. Tidak tahu apatemplateName
yang seharusnya, jadi saya dulunull
. KarenahtmlFieldName
saya menggunakan nama parameter (dalam kasus saya "ipmi" bukan "IPMI"). Itu berhasil bagi saya.Untuk contoh ini, saya menonaktifkan bidang formulir berdasarkan izin, tetapi masih menampilkannya. Saya memiliki bidang tersembunyi untuk mengirim nilai ke pengontrol, tetapi menginginkan nama bidang yang berbeda di EditorFor. Parameter pertama setelah nilai model mewakili properti "name", kedua adalah nama baru.
Hasil dalam:
sumber
Sederhanakan, Anda sudah memberikan ID Anda hanya harus dapat menggunakan metode "TextBox" bukan "TextBoxFor" dan itu akan bekerja dengan baik di sisi klien dan sisi server. Selain itu, meskipun jawaban yang diterima akan berfungsi tetapi akan menghasilkan atribut Nama duplikat pada tag Anda jika Anda memeriksanya menggunakan browser. Solusi di bawah ini tidak memiliki masalah itu.
MvcHtmlString Html.TextBox (nama string, nilai string, objek htmlAttributes)
sumber