モデルを作成し、モデルをパラメーターとして渡すビューを呼び出すコントローラーがあります。ビューには、モデルのタイプを指定する@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 }
}
完璧に動作します:)