16

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

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

在我看来:

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

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

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

可以实现吗?

4

4 回答 4

15

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

但是您可以尝试自定义助手或尝试在模型上使用Editable而不是Readonly在您的视图中使用元数据属性。

[Editable(false)]

我想您已经研究过 ReadOnly(true) 是否与 Html.EditorForModel 一起工作?

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

于 2013-02-21T06:14:50.750 回答
11

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

这意味着RegisterModel将在用户提交表单后发回的实例将始终null在其属性上具有价值UserName,而不管用户在表单的相应字段中的输入如何。

于 2014-10-03T10:01:34.187 回答
9

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

试试这个

Html.TextBoxFor(x => x.UserName, new { readonly = "readonly" })
于 2013-02-21T06:06:16.117 回答
0

如果您使用的是 SETTER,则必须使用 { get; 私人套装;}。这将使客户无法更改该值。您也可以只使用 HTML 5 输入并在此处进行标记。

于 2014-08-22T01:11:39.243 回答