Как создать текстовое поле readonly в ASP.NET MVC3 Razor

Как создать текстовое поле только для чтения в ASP.NET MVC3, с движком просмотра Razor? Есть ли способ HTMLHelper для этого?

Что-то вроде этого ?

@Html.ReadOnlyTextBoxFor(m => m.userCode)

 @Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" }) 

Вы можете сделать HTML Helper для этого, но это просто атрибут HTML, как и любой другой. Вы сделаете HTML-помощник для текстового поля с другими атрибутами?

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 :

  1. Создайте папку с именем EditorTemplates в ~/Views/Shared/
  2. Создайте бритву PartialView именем String.cshtml
  3. Заполните 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" }) } 
  4. В classе модели поместите атрибут [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 следующим образом:

  

и второй, будет оказывать;

  

Вы можете использовать это решение для любых типов данных ( DateTime , DateTimeOffset , DataType.Text , DataType.MultilineText и т. Д.). Просто создайте editor-template .

Решение с помощью TextBoxFor в порядке, но если вы не хотите, чтобы поле, подобное EditBox, было стильным (это может быть немного смутно для пользователя), необходимо внести следующие изменения:

1. Код бритвы перед изменением

 
@Html.EditorFor(model => model.Text) @Html.ValidationMessageFor(model => model.Text)

2. После изменений

  
@Html.DisplayFor(model => model.Text)
@Html.HiddenFor(model => model.Text) @Html.ValidationMessageFor(model => model.Text)

Обычно это решение отключается от редактирования, но показывает его значение. Нет необходимости в модификациях кода.

с кредитами к предыдущему ответу @Bronek и @Shimmy

Это я сделал что-то в ASP.NET Core

   

Первый вход – только для чтения, а второй – для controllerа и скрыт. Надеюсь, это будет полезно для кого-то, кто работает с ASP.Net Core.

  @Html.TextBox("Recivers", Model, new { @class = "form-control", style = "width: 300px", @readonly = "readonly" }) 
 @Html.TextBoxFor(model => model.IsActive, new { readonly= "readonly" }) 

Это просто отлично подходит для текстового поля. Однако, если вы попытаетесь сделать то же самое для checkbox попробуйте использовать это, если вы его используете

 @Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" }) 

Но не используйте disable потому что отключить всегда отправлять значение по умолчанию false на сервер либо он был в проверенном, либо непроверенном состоянии. И readonly не работает для флажка и radio button . readonly работает только для text полей.

Вы можете использовать приведенный ниже код для создания TextBox как доступного только для чтения.

Метод -1

  @Html.TextBoxFor(model => model.Fields[i].TheField, new { @readonly = true }) 

Метод -2

 @Html.TextBoxFor(model => model.Fields[i].TheField, new { htmlAttributes = new {disabled = "disabled"}}) 
Interesting Posts

Установите и запустите 32-разрядную версию на 64-битной машине

Каковы некоторые хорошие обучающие игры для iPhone 3D / 2D OpenGL ES?

Медленный компьютер на зарядном устройстве низкой мощности

Восстановление данных на поврежденном диске 3 ТБ

django orm, как просмотреть (или зарегистрировать) выполненный запрос?

Как настроить простой VPN для безопасного подключения к Интернету через незашифрованный Wi-Fi?

Сервер Ubuntu Samba, не обнаруженный Windows 7

Могу ли я заставить функцию plpgsql возвращать целое число без использования переменной?

Прокси-сервер WebView android

Как добавить первичный ключ в таблицу MySQL?

На PCIe 1.0 64-разрядная графическая карта может быть совместима с 32-разрядной ОС (Windows 7 32bits)

Изменение файла hosts на снежном барсе

-bash: ./my_script: / bin / bash ^ M: плохой интерпретатор: нет такого файла или каталога

Когда следует использовать ugettext_lazy?

Почему преобразование sortBy запускает работу Spark?

Давайте будем гением компьютера.