Jawaban:
@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?
@
. 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:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Anda cukup melakukan ini:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
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:
@if(ViewData.ModelMetadata.IsReadOnly) {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line readonly", @readonly = "readonly", disabled = "disabled" })
} else {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line" })
}
Di kelas model, letakkan [ReadOnly(true)]
atribut pada properti yang Anda inginkan readonly
.
Sebagai contoh,
public class Model {
// [your-annotations-here]
public string EditablePropertyExample { get; set; }
// [your-annotations-here]
[ReadOnly(true)]
public string ReadOnlyPropertyExample { get; set; }
}
Sekarang Anda dapat menggunakan sintaks default Razor:
@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)
Yang pertama membuat normal text-box
seperti ini:
<input class="text-box single-line" id="field-id" name="field-name" />
Dan yang kedua akan membuat;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
Anda dapat menggunakan solusi ini untuk semua jenis data ( DateTime
, DateTimeOffset
, DataType.Text
, DataType.MultilineText
dan sebagainya). Buat saja editor-template
.
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
<div class="editor-field">
@Html.EditorFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
Setelah perubahan
<!-- New div display-field (after div editor-label) -->
<div class="display-field">
@Html.DisplayFor(model => model.Text)
</div>
<div class="editor-field">
<!-- change to HiddenFor in existing div editor-field -->
@Html.HiddenFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
Umumnya, solusi ini mencegah bidang dari pengeditan, tetapi menunjukkan nilainya. Tidak perlu modifikasi di belakang kode.
Dengan kredit untuk jawaban sebelumnya oleh @Bronek dan @Shimmy:
Ini seperti saya telah melakukan hal yang sama di ASP.NET Core:
<input asp-for="DisabledField" disabled="disabled" />
<input asp-for="DisabledField" class="hidden" />
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.
@Html.TextBox("Receivers", Model, new { @class = "form-control", style = "width: 300px", @readonly = "readonly" })
@Html.TextBoxFor(model => model.IsActive, new { readonly= "readonly" })
Ini bagus untuk kotak teks. Namun, jika Anda mencoba melakukan hal yang sama untuk checkbox
kemudian coba gunakan ini jika Anda menggunakannya:
@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" })
Tetapi jangan gunakan disable
, karena nonaktifkan selalu mengirimkan nilai default false
ke server - baik dalam status dicentang atau tidak dicentang. Dan readonly
tidak berfungsi untuk kotak centang dan radio button
. readonly
hanya bekerja untuk text
ladang.
Anda dapat menggunakan kode di bawah ini untuk membuat TextBox sebagai read-only.
Metode 1
@Html.TextBoxFor(model => model.Fields[i].TheField, new { @readonly = true })
Metode 2
@Html.TextBoxFor(model => model.Fields[i].TheField, new { htmlAttributes = new {disabled = "disabled"}})
@
awalanreadonly
properti. Lihat suntingan saya.