Bagaimana cara membuat kotak teks hanya-baca di ASP.NET MVC3 dengan mesin tampilan Razor?
Apakah ada metode HTMLHelper yang tersedia untuk melakukan itu?
Sesuatu seperti berikut ini?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
Bagaimana cara membuat kotak teks hanya-baca di ASP.NET MVC3 dengan mesin tampilan Razor?
Apakah ada metode HTMLHelper yang tersedia untuk melakukan itu?
Sesuatu seperti berikut ini?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Anda dipersilakan untuk membuat Pembantu HTML untuk ini, tetapi ini hanyalah atribut HTML seperti yang lainnya. Apakah Anda akan membuat Pembantu HTML untuk kotak teks yang memiliki atribut lain?
@
awalanreadonly
properti. Lihat suntingan saya.@
. Anda biasanya hanya akan melihatnya dengan kata kunci yang cocok dengan atribut HTML (seperti hanya baca, kelas, dll.)@
menggunakan atribut yang cocok dengan kata kunci C # .@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
PEMBARUAN: Sekarang sangat mudah untuk menambahkan atribut HTML ke template editor default. Ia tidak pernah melakukan ini:
Anda cukup melakukan ini:
Manfaat: Anda tidak perlu menelepon
.TextBoxFor
, dll. Untuk templat. Telepon saja.EditorFor
.Sementara solusi @ Shark berfungsi dengan benar, dan sederhana serta berguna, solusi saya (yang selalu saya gunakan) adalah yang ini: Buat atribut
editor-template
yang dapat menanganireadonly
:EditorTemplates
dalam~/Views/Shared/
PartialView
bernamaString.cshtml
Isi
String.cshtml
dengan kode ini:Di kelas model, letakkan
[ReadOnly(true)]
atribut pada properti yang Anda inginkanreadonly
.Sebagai contoh,
Sekarang Anda dapat menggunakan sintaks default Razor:
Yang pertama membuat normal
text-box
seperti ini:Dan yang kedua akan membuat;
Anda dapat menggunakan solusi ini untuk semua jenis data (
DateTime
,DateTimeOffset
,DataType.Text
,DataType.MultilineText
dan sebagainya). Buat sajaeditor-template
.sumber
Solusi dengan TextBoxFor tidak apa-apa, tetapi jika Anda tidak ingin melihat bidang seperti EditBox bergaya (mungkin akan sedikit membingungkan pengguna) melibatkan perubahan sebagai berikut:
Kode silet sebelum perubahan
Setelah perubahan
Umumnya, solusi ini mencegah bidang dari pengeditan, tetapi menunjukkan nilainya. Tidak perlu modifikasi di belakang kode.
sumber
Dengan kredit untuk jawaban sebelumnya oleh @Bronek dan @Shimmy:
Ini seperti saya telah melakukan hal yang sama di ASP.NET Core:
Masukan pertama hanya-baca dan yang kedua meneruskan nilai ke pengontrol dan disembunyikan. Saya berharap ini akan bermanfaat bagi seseorang yang bekerja dengan ASP.NET Core.
sumber
sumber
Ini bagus untuk kotak teks. Namun, jika Anda mencoba melakukan hal yang sama untuk
checkbox
kemudian coba gunakan ini jika Anda menggunakannya:Tetapi jangan gunakan
disable
, karena nonaktifkan selalu mengirimkan nilai defaultfalse
ke server - baik dalam status dicentang atau tidak dicentang. Danreadonly
tidak berfungsi untuk kotak centang danradio button
.readonly
hanya bekerja untuktext
ladang.sumber
Anda dapat menggunakan kode di bawah ini untuk membuat TextBox sebagai read-only.
Metode 1
Metode 2
sumber