В течение очень долгого времени я думал, что применение атрибута ReadOnly
к свойству модели представления означает, что сгенерированный элемент будет иметь HTML-атрибут readonly
.
Затем я был очень разочарован, обнаружив, что этот атрибут ReadOnly
применяется только к привязке модели, и что значение во входных данных только для чтения не привязано к опубликованной модели представления, и люди все еще могут вводить в поле пользовательского интерфейса, позволяя им думать, значение будет сохранено.
Теперь мне нужно просмотреть мою модель представления и везде, где есть этот атрибут, закомментировать его и вручную применить атрибуты HTML readonly
к затронутым элементам Razor.
Теперь я хотел бы создать атрибут ReallyReadOnly
, чтобы для свойств модели представления, помеченных как таковые, генерировался подлинный ввод только для чтения, а его значение было привязано к опубликованной модели представления.
Где я могу, если могу, в процессе рендеринга проверить этот новый атрибут и воздействовать на него?
HtmlHelper
, который считывает метаданные свойства (значение.IsReadOnly
) и добавляет атрибутreadonly="readonly"
в HTML-код, который он выводит. - person   schedule 26.05.2016ReadOnlyInput
, который считывает метаданные модели и проверяет этот новый атрибут. Поскольку других вариантов, похоже, очень мало, почему бы не сделать свой комментарий ответом? - person ProfK   schedule 26.05.2016readonly
, еслиhtmlAttributes
предоставляются). В этом случае он основан на предоставлении параметраbool
, но его можно удалить, и метод может быть просто@Html.ReadOnlyTextBoxFor(m => m.YourProperty)
. Но поскольку метод расширения специфичен, в использовании этого атрибута нет реальной необходимости. - person   schedule 27.05.2016@Html.MyTextBoxFor()
, который считывает свойствоModelMetadata.IsReadonly
и добавляет атрибут по мере необходимости, но это будет означать замену всех ваших текущих методов@Html.TextBoxFor()
в ваших представлениях. - person   schedule 27.05.2016