我有一个带有属性的模型
[ReadOnly(true)]
public decimal BodyMassIndex { get; private set; }
在我打电话时的视图中
@Html.EditorForModel()
我仍然得到该属性的标准可编辑文本框
为什么是这样?如果文本框仍然是可编辑的,那么这个 DataAnnotation Attibute 的意义何在?
我有一个带有属性的模型
[ReadOnly(true)]
public decimal BodyMassIndex { get; private set; }
在我打电话时的视图中
@Html.EditorForModel()
我仍然得到该属性的标准可编辑文本框
为什么是这样?如果文本框仍然是可编辑的,那么这个 DataAnnotation Attibute 的意义何在?
这不是 DataAnnotation 属性。请注意,它位于System.ComponentModel命名空间中。数据注释位于System.ComponentModel.DataAnnotations命名空间中。
但是,这是我们可以考虑支持它的情况。但是您到底期望会发生什么,为什么要这样做?
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 of readonly 告诉编译器绕过保留字
您可以使用
@Html.TextBoxFor(x=> x.ModelProperty, new { @readonly="readonly"})
根据我对您的问题和对其他答案的评论的了解,您只是想显示 BodyMassIndex,而不是将其设置为可编辑。
如果是这种情况,请使用@Html.DisplayFor
而不是@Html.EditorFor
.
这适用于带有 Bootstrap 3 的 Vs2013 C#。
<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>