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-templateyang dapat menanganireadonly :
EditorTemplatesdalam~/Views/Shared/PartialViewbernamaString.cshtmlIsi String.cshtmldengan 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-boxseperti 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.MultilineTextdan 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 checkboxkemudian 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 falseke server - baik dalam status dicentang atau tidak dicentang. Dan readonlytidak berfungsi untuk kotak centang dan radio button. readonlyhanya bekerja untuk textladang.
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"}})
@awalanreadonlyproperti. Lihat suntingan saya.