Подтвердить что ты не робот

Атрибут 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 в представлении, чтобы сделать его только для чтения, но я бы предпочел, чтобы это можно было сделать в самом классе модели.

Можно ли это сделать?

4b9b3361

Ответ 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 и пометить его там.