ReadOnly属性在ASP.NET MVC模型中不起作用

时间:2013-02-21 06:01:22

标签: asp.net-mvc attributes data-annotations

我在模型类中将属性标记为 readonly ,如下所示:

public class RegisterModel
{
    [Display(Name = "User name")]
    [ReadOnly(true)]
    public string UserName { get; set; }
    ...
}

在我看来:

@Html.EditorFor(m => m.UserName)

但是当我运行该应用程序时,文本框不是只读。

我知道我可以在视图中使用html属性使其成为只读,但我更希望是否可以在模型类本身中完成。

可以实现吗?

4 个答案:

答案 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输入并在那里标记。