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

Edi*_*ang 16 asp.net-mvc attributes data-annotations

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

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

在我看来:

@Html.EditorFor(m => m.UserName)
Run Code Online (Sandbox Code Playgroud)

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

我知道我可以在视图中使用html属性使其只读,但我更喜欢这可以在模型类本身中完成.

可以实现吗?

Shu*_*ubh 15

[更新]我不认为没有new { @readonly = "readonly" }.Readonlyproperty指定此属性绑定的属性是只读还是读/写.细节在这里.

但你可以尝试自定义助手或尝试使用Editable,而不是Readonly在模型上,并在您查看使用元数据属性.

[Editable(false)]
Run Code Online (Sandbox Code Playgroud)

我想你已经研究过 ReadOnly(true)是否适用于Html.EditorForModel?

也是一篇很好的文章odetocode.com

  • 感到困惑的是这是如何选择的答案.我设置了一个简单的示例项目,这个解决方案不起作用.Victor下面的答案是唯一的解决方案.我理解他想在模型中指定它,但不能这样做. (5认同)

Pie*_*let 11

ReadOnly属性不会阻止HMTL帮助程序将字段显示为已启用的输入.这是唯一一个MVC数据Binder将尊重的信息.

这意味着RegisterModel将在用户提交表单后回发的实例将始终具有nullUserName属性的值,而不管用户在表单的相应字段中的输入.


Vic*_*tor 9

ReadOnly属性不将输入设置为只读.

试试这个

Html.TextBoxFor(x => x.UserName, new { readonly = "readonly" })
Run Code Online (Sandbox Code Playgroud)