ビューモデルを作成します。
public class UserViewModel {
public myApplication.Models.User User;
public string PartialViewName;
public PartialViewModelBase Tab;
}
PartialViewModelBase由来の各タブのビューモデルを作成します:
public abstract class PartialViewModelBase {
}
public class Tab1PartialViewModel : PartialViewModelBase {
...
}
public class TabNPartialViewModel : PartialViewModelBase {
...
}
その後、あなたのビューとPartialViewsが強く型付けされます
ビュー:
を
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<UserViewModel>" %>
PartialViews:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Tab1PartialViewModel>" %>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TabNPartialViewModel>" %>
次に、あなたのビューであなたのようにあなたの部分的なビューを使用することができます。
お使いのコントローラのアクションで
<% Html.RenderPartial(Model.PartialViewName, Model.Tab); %>
:
public ActionResult YourAction(string tab)
{
// check if tab is valid !!!
var model = new UserViewModel {
User = new myApplication.Models.User();
PartialViewName = tab;
Tab = TabRepository.GetTabByName(tab);
/*
* or
* Tabs = (new Dictionary<string, type> {
* {"Tab1", typeof(Tab1PartialViewName)},
* {"TabN", typeof(TabNPartialViewName)}
* })[tab];
*/
};
Return View(model);
}
は、この情報がお役に立てば幸いです。
これは私の問題に対処するための素晴らしい方法と思われる。しかし、PartialViewModelBaseクラスはどうですか?それは私が作成しなければならないクラスですか? TabRepository.GetTabByName(タブ); PartialViewModelBaseを返す必要があります。これどうやってするの ? – Flesym
PartialViewModelBaseは、PartialViewModelsの基本クラスに過ぎません。それは単に空の抽象クラスである可能性があります。 TabRepositoryは、例えば一例です。 Dictionary TabTypes = new {{"Tab1"、typeof(Tab1ViewModel)}、...}を作成するだけで済みます。あなたのコントローラのどこかで次のようにしてください:Tab = Activator.CreateInstance(TabTypes [tab]); –