我在模型类中将属性标记为 readonly ,如下所示:
public class RegisterModel
{
[Display(Name = "User name")]
[ReadOnly(true)]
public string UserName { get; set; }
...
}
在我看来:
@Html.EditorFor(m => m.UserName)
但是当我运行该应用程序时,文本框不是只读。
我知道我可以在视图中使用html属性使其成为只读,但我更希望是否可以在模型类本身中完成。
可以实现吗?
答案 0 :(得分:15)
[更新]我认为没有new { @readonly = "readonly" }
是不可能的。Readonly
属性指定此属性绑定的属性是只读还是读/写。 Details Here.
但您可以尝试使用Custom Helpers或尝试在模型上使用Editable
代替Readonly
,并在视图中使用元数据属性。
[Editable(false)]
我猜你已经调查过了 Does ReadOnly(true) work with Html.EditorForModel?
也 一篇好文章odetocode.com
答案 1 :(得分:11)
ReadOnly
属性不会阻止HMTL帮助程序将字段显示为已启用的输入。这是一个信息,唯一的MVC数据Binder将尊重。
这意味着RegisterModel
实例(将在用户提交表单后回发)将始终在其null
属性上具有UserName
值,无论用户在相应的位置输入形式领域。
答案 2 :(得分:9)
ReadOnly属性不会将输入设置为只读。
试试这个
Html.TextBoxFor(x => x.UserName, new { readonly = "readonly" })
答案 3 :(得分:0)
如果您正在使用SETTER,则必须使用{get;私人集; }。这将使客户无法改变价值。您也可以使用HTML 5输入并在那里标记。