7

モデルを作成し、モデルをパラメーターとして渡すビューを呼び出すコントローラーがあります。ビューには、モデルのタイプを指定する@modelディレクティブがあります。同じビューを再利用したいのですが、コントローラーから別のモデルを渡します。ビューの@modelディレクティブを動的に(または条件付きで)変更することは可能ですか?

たとえば、私のコントローラーアクションでは:

var contactsModel = db.GetContacts();
var companiesModel = db.GetCompanies();
return (someCondition)? View(contactsModel):View(companiesModel);

次に、両方のモデルを満たすために、Viewディレクティブで@modelを定義するにはどうすればよいですか?渡されたモデルのタイプに基づいて同じビューで情報をレンダリングしたい。

ありがとうございました。


アップデート:

おかげで、しかし私は異なるモデルでのみ1つの共通のビューを使用する必要があります。

可能です。これを行う方法は次のとおりです。

ビューで私は定義します:

@model IEnumerable<MvcApplication1.Models.IBaseInterface>

Modelクラスでは、次のように定義します。

public interface IBaseInterface { }

public class Contact: IBaseInterface {}

public class Company: IBaseInterface {}

次に、ビューで使用します。

@if (Model is List<Contact>) {
    @foreach (var item in (List<Contact>)Model)
        { // Here item has type Contact }
}

@if (Model is List<Company>) {
    @foreach (var item in (List<Company>)Model)
        { // Here item has type Company }
}

完璧に動作します:)

4

2 に答える 2

4

ビューの@modelディレクティブを動的に(または条件付きで)変更することは可能ですか?

いいえ。

異なるモデルを渡す必要がある場合、これは異なるビューが必要であることを意味します。

return (someCondition) 
    ? View("Contacts", contactsModel) 
    : View("Companies", companiesModel);\

ASP.NETMVCの基本的なルールは次のとおりですa view model per view

于 2012-07-14T22:06:06.390 に答える
0

簡単で優れた解決策は、ビューモデルを使用してビューをそのビューモデルに結び付け、コントローラーアクションからモデルをビューモデルに変換してビューに渡すことです。

あなたがダイナミクスのファンで、2 つのモデルのプロパティが同じである場合、別のオプションとして、ビューをdynamicモデルに関連付けることができます。

于 2012-07-15T06:33:40.497 に答える