Изменилось ли поведение для DataAnnotations в asp.net mvc 3? - PullRequest
4 голосов
/ 19 сентября 2011

У меня есть модель со свойством

[ReadOnly(true)]
public decimal BodyMassIndex { get; private set; }

На мой взгляд, когда я звоню

@Html.EditorForModel()

Я все еще получаю стандартное редактируемое текстовое поле для этого свойства

Почему это? если текстовое поле все еще редактируемое, какой смысл в этом атрибуте аннотации данных?

Пост Брэда Уилсона

Ответы [ 5 ]

4 голосов
/ 20 сентября 2011

Это не атрибут DataAnnotation.Обратите внимание, что оно находится в пространстве имен System.ComponentModel .Аннотации данных находятся в пространстве имен System.ComponentModel.DataAnnotations .

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

0 голосов
/ 24 октября 2014

Это работает в 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>
0 голосов
/ 20 сентября 2011

Насколько я понимаю, ваш вопрос и комментарии к другим ответам вы просто хотите отобразить BodyMassIndex, а не редактировать его.

Если это так, используйте @Html.DisplayFor вместо @Html.EditorFor.

0 голосов
/ 20 сентября 2011

вы можете использовать

@Html.TextBoxFor(x=> x.ModelProperty, new { @readonly="readonly"})
0 голосов
/ 19 сентября 2011

AFAIK Атрибут ReadOnly предназначен для свойства класса. От 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 of readonly говорит компилятору обойти зарезервированное слово

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...