Атрибут ReadOnly не работает в ASP.NET MVC Models
В классе модели я обозначил свойство readonly, например:
public class RegisterModel
{
[Display(Name = "User name")]
[ReadOnly(true)]
public string UserName { get; set; }
...
}
и, на мой взгляд:
@Html.EditorFor(m => m.UserName)
но когда я запускаю приложение, текстовое поле не является только для чтения.
Я знаю, что я могу использовать атрибуты html в представлении, чтобы сделать его только для чтения, но я бы предпочел, чтобы это можно было сделать в самом классе модели.
Можно ли это сделать?
Ответы
Ответ 1
[Обновление] Я не думаю, что это возможно без new { @readonly = "readonly" }
. Readonly
свойство указывает, связано ли свойство, связанное с этим атрибутом, только для чтения или чтения/записи. Подробности здесь.
Но вы можете попробовать Пользовательские помощники или попробовать использовать Editable
вместо Readonly
в модели и использовать свойство метаданных в представлении.
[Editable(false)]
Думаю, вы уже изучили
Работает ли ReadOnly (true) с Html.EditorForModel?
и
прекрасная статья odetocode.com
Ответ 2
Атрибут ReadOnly
не блокирует хелпер HMTL для отображения поля в качестве разрешенного ввода. Это информация, которая будет уважать только данные MVC данных.
Это означает, что экземпляр RegisterModel
, который будет отправлен назад после отправки формы пользователем, всегда будет иметь значение null
на свойстве UserName
, независимо от ввода пользователя в соответствующее поле формы.
Ответ 3
Атрибут ReadOnly не устанавливает ввод только для чтения.
Попробуйте это
Html.TextBoxFor(x => x.UserName, new { readonly = "readonly" })
Ответ 4
Если вы используете SETTER, вы должны использовать {get; частный набор; }. Это сделает так, чтобы клиент не мог изменить значение. Вы также можете просто использовать вход HTML 5 и пометить его там.