Как создать текстовое поле только для чтения в ASP.NET MVC3 с помощью механизма просмотра Razor?
Есть ли для этого метод HTMLHelper?
Что-то вроде следующего?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
Как создать текстовое поле только для чтения в ASP.NET MVC3 с помощью механизма просмотра Razor?
Есть ли для этого метод HTMLHelper?
Что-то вроде следующего?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Вы можете создать для этого HTML-помощник, но это просто атрибут HTML, как и любой другой. Вы бы создали помощник HTML для текстового поля с другими атрибутами?
@
префиксаreadonly
свойства. Смотрите мою правку.@
. Обычно вы видите это только с ключевыми словами, которые соответствуют атрибутам HTML (например, только для чтения, класс и т. Д.)@
для использования атрибутов, соответствующих ключевым словам C # .@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
ОБНОВЛЕНИЕ: теперь очень просто добавлять атрибуты HTML в шаблоны редактора по умолчанию. Вместо этого нужно:
вы просто можете сделать это:
Преимущества: Вам не нужно звонить
.TextBoxFor
и т. Д. За шаблонами. Просто позвони.EditorFor
.Хотя решение @Shark работает правильно, простое и полезное, мое решение (которое я использую всегда) таково: создать объект,
editor-template
который может обрабатыватьreadonly
атрибут :EditorTemplates
в~/Views/Shared/
PartialView
именемString.cshtml
Заполните
String.cshtml
этот код:В классе модели поместите
[ReadOnly(true)]
атрибут в свойства, которыми вы хотите бытьreadonly
.Например,
Теперь вы можете просто использовать синтаксис Razor по умолчанию:
Первый рендерит нормаль
text-box
так:А второй будет обрабатывать;
Вы можете использовать это решение для любого типа данных (
DateTime
,DateTimeOffset
,DataType.Text
,DataType.MultilineText
и так далее). Просто создайтеeditor-template
.источник
Решение с TextBoxFor в порядке, но если вы не хотите видеть поле типа EditBox style (это может немного сбить с толку пользователя), внесите следующие изменения:
Код Razor до изменений
После изменений
Как правило, это решение предотвращает редактирование поля, но показывает его значение. Нет необходимости в модификации кода программной части.
источник
С кредитами на предыдущий ответ @Bronek и @Shimmy:
Это похоже на то, что я сделал то же самое в ASP.NET Core:
Первый ввод доступен только для чтения, а второй передает значение контроллеру и скрыт. Надеюсь, это будет полезно для тех, кто работает с ASP.NET Core.
источник
источник
Это нормально для текстового поля. Однако, если вы попытаетесь сделать то же самое для,
checkbox
попробуйте использовать это, если вы его используете:Но не используйте
disable
, потому что disable всегда отправляет наfalse
сервер значение по умолчанию - либо оно было отмечено, либо нет. Иreadonly
не работает для флажка иradio button
.readonly
работает только дляtext
полей.источник
Вы можете использовать приведенный ниже код для создания TextBox только для чтения.
Способ 1
Способ 2
источник