0

非常に長い間、私はReadOnly属性をviewmodelプロパティに適用すると、生成された要素がreadonly HTML属性を持つことを意味しました。誤解を招く属性[ReadOnly]が読み取り専用フィールドを生成する方法

次に、このReadOnly属性がモデルバインディングにのみ適用され、読み取り専用入力の値が投稿されたviewmodelにバインドされておらず、ユーザーがUIフィールドに入力できることがわかりました。その値が格納されると考えるようにします。

ここでは、この属性がある場合はいつでも、ビューモデルを参照してコメントアウトし、HTML readonly属性を影響を受けるRazor要素に手動で適用する必要があります。

そのようにマークのviewmodelの性質のために、本物の読み取り専用の入力が生成され、その値がポストバックビューモデル

私ができるにバインドされているように、私は今、ReallyReadOnly属性をしたいと思い

レンダリングプロセスで、この新しい属性をチェックしてその属性を操作できますか?

+2

簡単な作業ではありません。プロパティメタデータ( '.IsReadOnly'値)を読み込み、出力するhtmlに' readonly = "readonly"属性を追加する独自の 'HtmlHelper'拡張メソッドを作成する必要があります。 –

+3

それは誤解を招くことはありません。文字通り何百もの属性があり、そのほとんどはモデルには適用されず、単純に無視されます。あなたは、どの属性が適用され、どの属性が適用されないかを理解する責任があります。属性は多くの目的に使用できるため、システムがこれを警告する方法はありません。 –

+0

@StephenMueckeそれは私が心に持っているものです。たとえば、モデルのメタデータを読み込み、その新しい属性をチェックする 'ReadOnlyInput'他のオプションはほとんどないようですので、あなたのコメントを答えにしてみませんか? – ProfK

答えて

0

悲しいことに、私が知っている最も簡単な解決策は、given here for datesのようなモデルに適用するReadOnlyエディタテンプレートを使用することです。

モデルバインドにもReadOnlyを適用したいが、少なくとも同じ場所に同じものを適用したい場合は、重複することになります。

関連する問題