UPDATE:
Теперь очень просто добавить атрибуты html в шаблоны редактора по умолчанию. Значит вместо этого:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Вы просто можете сделать это:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
Преимущества: Вам не нужно звонить .TextBoxFor
и т. Д. Для шаблонов. Просто позвоните .EditorFor
.
Хотя решение @ Shark работает правильно, оно простое и полезное, мое решение (которое я всегда использую) таково: Создайте editor-template
, который может обрабатывать атрибут readonly
:
- Создать папку с именем
EditorTemplates
в ~/Views/Shared/
- Создать бритву
PartialView
с именем String.cshtml
Заполните String.cshtml
этим кодом:
@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" })
}
В классе модели поместите атрибут [ReadOnly(true)]
в свойства, которые должны быть readonly
.
, например
public class Model {
// [your-annotations-here]
public string EditablePropertyExample { get; set; }
// [your-annotations-here]
[ReadOnly(true)]
public string ReadOnlyPropertyExample { get; set; }
}
Теперь вы можете использовать стандартный синтаксис бритвы просто:
@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)
Первый отображает нормальный text-box
, например:
<input class="text-box single-line" id="field-id" name="field-name" />
и второй, будет отображать;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
Вы можете использовать это решение для любого типа данных (DateTime
, DateTimeOffset
, DataType.Text
, DataType.MultilineText
и т. Д.). Просто создайте editor-template
.