Изменилось ли поведение для DataAnnotations в asp.net mvc 3?
У меня есть модель со свойством
[ReadOnly(true)]
public decimal BodyMassIndex { get; private set; }
На мой взгляд, когда я звоню
@Html.EditorForModel()
Я все еще получаю стандартное редактируемое текстовое поле для этого свойства
Почему это? если текстовое поле все еще редактируемо, какой смысл в этом DataAnnotation Attibute?
5 ответов
Это не атрибут DataAnnotation. Обратите внимание, что он находится в пространстве имен System.ComponentModel. Аннотации данных находятся в пространстве имен System.ComponentModel.DataAnnotations.
Тем не менее, это тот случай, когда мы могли бы рассмотреть возможность его поддержки. Но что именно вы ожидали, и почему вы этого хотите?
Ты можешь использовать
@Html.TextBoxFor(x=> x.ModelProperty, new { @readonly="readonly"})
Из того, что я понимаю по вашему вопросу и по комментариям к другим ответам, вы просто хотите отобразить BodyMassIndex, а не редактировать его.
Если это так, используйте @Html.DisplayFor
скорее, чем @Html.EditorFor
,
AFAIK атрибут ReadOnlyAttribute предназначен для свойства класса. Из MSDN
Members that are marked with the ReadOnlyAttribute set to true or that do not have a Set method
cannot be changed. Members that do not have this attribute or that are marked with the
ReadOnlyAttribute set to false are read/write, and they can be changed. The default is No.
Таким образом, вы используете это внутри ваших классов, чтобы предотвратить изменение свойств. (по крайней мере, значение, которое я даю этому атрибуту)
Если вы хотите, чтобы текстовое поле только для чтения, используйте что-то подобное
@Html.TextBox("MyText", "my text", new { @readonly="readonly" })
@ first readonly говорит компилятору обойти зарезервированное слово
Это работает в Vs2013 C# с Bootstrap 3.
<div class="form-group">
@Html.LabelFor(model => model.PasswordHash, htmlAttributes: new { @class = "control-label col-md-3" })
<div class="col-md-6">
@Html.EditorFor(model => model.PasswordHash, new { htmlAttributes = new { @class = "form-control", @readonly="readonly" } })
@Html.ValidationMessageFor(model => model.PasswordHash, "", new { @class = "text-danger" })
</div>
</div>