web-dev-qa-db-ja.com

ReadOnly属性はASP.NETMVCモデルでは機能しません

次のように、モデルクラスでプロパティを読み取り専用としてマークしました。

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

そして私の見解では:

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

しかし、アプリケーションを実行すると、テキストボックスそうではありません読み取り専用です。

ビューでhtml属性を使用して読み取り専用にすることができることはわかっていますが、これをモデルクラス自体で実行できることをお勧めします。

それは達成できますか?

16
Edi Wang

[更新] new { @readonly = "readonly" }.Readonlyプロパティがないと、この属性がバインドされているプロパティが読み取り専用か読み取り/書き込みかを指定しないと、不可能だと思います。 詳細はこちら

ただし、 カスタムヘルパー を試すか、モデルでEditableの代わりにReadonlyを使用して、ビューのメタデータプロパティを使用することができます。

[Editable(false)]

すでに調べたと思います ReadOnly(true)はHtml.EditorForModelで機能しますか?

また、すばらしい記事 odetocode.com

15
Shubh

ReadOnly属性は、HMTLヘルパーがフィールドを有効な入力として表示することをブロックしません。これは、MVCデータバインダーのみが尊重する情報です。

つまり、ユーザーがフォームを送信した後にポストバックされるRegisterModelインスタンスは、適切なユーザーの入力に関係なく、そのnullプロパティに常にUserName値を持ちます。フォームのフィールド。

11
Pierre Watelet

ReadOnly属性は、入力を読み取り専用に設定しません。

これを試して

Html.TextBoxFor(x => x.UserName, new { readonly = "readonly" })
9
Victor

SETTERを使用している場合は、{get;を使用する必要があります。プライベートセット; }。これにより、クライアントが値を変更できないようになります。 HTML 5入力を使用して、そこにマークを付けることもできます。

0
Christian H