0

DisplayFor と EditorFor を使用する代わりに、より一般的な ContentFor を作成したいと思います。その Html 拡張では、メタデータ値を考慮して、結果のコントロールをレンダリングする方法を決定します。私が判断できない唯一のパズルのピースはこれです: 現在 DisplayTemplate をレンダリングしているか、EditorTemplate をレンダリングしているかを判断する方法はありますか? この実例として、文字列をレンダリングするときは、ディスプレイ バージョンでは としてレンダリングしたいのですが、エディタ バージョンをレンダリングするときは、テキスト ボックスとしてレンダリングしたいと思います。

説明をわかりやすくするために、Address.ascx という 2 つのテンプレートがあり、1 つは DisplayTemplates ディレクトリにあり、もう 1 つは EditorTemplates ディレクトリにあるとします。両方とも ContentFor を使用してレンダリングしたいのですが、表示バージョンではラベルとしてレンダリングされ、エディター バージョンではテキスト ボックスとしてレンダリングされます。

4

1 に答える 1

0

2 つの ASCX ファイルを使用して 1 つのファイル コントロールを呼び出す (これは実行可能ですが、別の RenderPartial または DisplayFor/LabelFor を実行するだけです) ことは私には意味がありません。それは「関心の分離」を破ります。Label はラベルを表示し、Display は値を表示します。コントロールがどのように表示するかを試みて把握することは意味がありません。

プロパティのカスタム表示またはラベルを使用する場合は、UIHint データ アノテーションを使用します。

[UIHint("MyCustomControlName")]

次に、DisplayTemplates と EditorTempaltes で「MyCustomControlName.ascx」ファイルを作成して、必要に応じてそのプロパティを表示します。さらに、ascx コントロールは、カスタム モデル メタデータを読み取り、必要なことは何でも実行できます。http://weblogs.asp.net/seanmcalinden/archive/2010/06/11/custom-asp-net-mvc-2-modelmetadataprovider-for-using-custom-view-model-attributes.aspxの例。

于 2010-07-29T20:29:46.817 に答える