1

C# 4.0 では、バリアンス指定子はインターフェイス タイプにのみ適用されるようです。

では、ViewModel / EditModel クラスとモデルの単純な階層があるとしましょう。

class MyEditModel<T> where T : Base { ... }
class Derived1 : Base { ... }
class Derived2 : Base { ... }

任意のタイプの MyEditModel (Base から派生している限り) を受け入れる部分ビューと、Derived1 のインスタンスのみを受け入れる別のビューがあります。同じページに両方をレンダリングするにはどうすればよいですか?

任意の MyEditModel を受け入れる部分ビューは、Derived1 のエディターと Derived2 のエディターの間で共有されます。

4

1 に答える 1

1

これを行うことができるのは、ビューが Base のビュー モデルを受け入れる場合だけです。OO の観点から見ると、MyEditModel と Derived1 は Base を共通の基本クラスとして共有しますが、他には何も共有しません。他の関係はありません。したがって、同じものを使用しようとしている場合は、Base から派生する必要があります。おそらく、Base のプロパティだけが共通しています。

編集:元の質問を誤解しました。あなたの質問の文字通りのテキストに基づいて、あなたは Derived1 に合格していると思いましたが、以下のコメントに基づいて合格していますMyEditModel<Derived1>。これはあなたが求めていることを行います:

Inherits="System.Web.Mvc.ViewPage<dynamic> 

動的ではインテリセンスの利点は得られませんが、型に同じビュー ファイルを再利用できるという利点と、コンパイラを満足させるためだけに追加のビュー モデル クラスを作成する必要がないという利点があります。

于 2010-10-08T03:18:03.630 に答える