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
.
Эти методы не имеют привязки бина на вашем контроллере, и вы вызываете их из других методов, это может быть причиной! hideAuth()
full()