0

S'Ok、次のモデルが与えられた場合:-

public class SomeViewModel
{
    public IAnimal Animal { get; set; }
    public Exception Exception { get; set; } 
}

そして、IAnimalこれのどちらでもかまいません。

public class Cat : IAnimal { .. } 
public class Dog : IAnimal { .. }

次のRazorコードを入力します

.. snip ..


@if (Model.Animal!= null)
{
    Html.DisplayForModel(Model.Animal);
}
else if (Model.Exception != null)
{
    Html.DisplayForModel(Model.Exception);
}

@Html.ActionLink("Lets go back home.", "Index")

モデルインスタンスがそれらの1つである場合、ビューは猫または犬のプロパティをレンダリングしていません。

現在、これらの各モデルは、ほんの数個の文字列やブールなどです。すべてのプリミティブ型。

そのため、モデルを渡すだけでレンダリングする必要があると思いました。

誰かが私がしたかもしれないことについて何か提案があります、間違っていますか?

また、ボーナスポイントの場合、これら2つのクラスのいずれか(たとえばクラス)の表示テンプレートを作成して、Catそれをそのまま表示することは可能ですか?例えば。手動で作成するのではなく、自分自身を表示するように指示しHtml.Labelます...など。

4

2 に答える 2

0

Cat/の表示テンプレートを作成することができますDog(テンプレートに使用できないインターフェイスとは異なります)。

これを行うには、Shared\DisplayTemplates フォルダーの下にファイルを作成しCat.cshtmlますが、このテンプレートでは、このテンプレートでレンダリングする html を手動で設定する必要があります。

編集 あなたの最初の質問の時点で-私DisplayForModelはあなたが探しているものだとは思わない、あなたが必要としているのはDisplayForです

于 2012-10-14T13:47:51.553 に答える
0

ビューでの自動レンダリングを許可するメタデータ アノテーション (プロパティ キャプション、検証など) に依存している場合、インターフェイスの操作は多少面倒なことに注意してください。MVC エンジンは、具体的な型ではなくインターフェイスからメタデータを抽出しようとします。少なくとも、組み込みのテンプレートを使用してそれを行います。テンプレートをオーバーライドして、具象型を調べ、その型に基づいてメタデータをロードすることで、この制限を回避できます。実行可能ですが、パフォーマンスが低下するためお勧めしません。

于 2012-10-14T18:43:14.570 に答える