複数のビューで1つのコントローラを使用してMVCアプリケーションを作成しようとしています。私は別のプロパティを持つ第2のルートを作成して、それを第2のフォルダにリダイレクトすることから始めました。複数のビューを持つシングルコントローラ
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"xml", // Route name
"xml/{controller}/{action}/{id}", // URL with parameters
new { mode = "xml", controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
SessionManager.Instance.InitSessionFactory("acstech.helpWanted");
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new ModeViewEngine());
}
その後、WebFormViewEngineから降りて、〜/ Viewから〜/ {mode} Viewにパスを変更しました。これは正しく動作し、ページを適切にレンダリングしました。私が遭遇した問題は、Html.ActionLinkがビューのレンダリングに関係なく常にモードバージョンを使用することです。これは私の目標を達成するための正しい方向です。もしそうなら、アクションリンクを適切に働かせるために何が欠けていますか?以下はViewEngineです。これは実験室のテストなので、いくつかの自由が取られています。
public class ModeViewEngine : WebFormViewEngine
{
public ModeViewEngine()
{
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
string mode = String.Empty;
if (controllerContext.RouteData.Values["mode"] != null)
mode = controllerContext.RouteData.Values["mode"] as string;
return new WebFormView(partialPath.Replace("~/Views", "~/" + mode + "Views"), null);
}
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
string mode = String.Empty;
if (controllerContext.RouteData.Values["mode"] != null)
mode = controllerContext.RouteData.Values["mode"] as string;
return new WebFormView(viewPath.Replace("~/Views", "~/" + mode + "Views"), masterPath);
}
}
それはうまくいくと私は基本ApplicationControllerを作成することによってビューを集中することができますが、2つの別々のビュー構造を持つことが欲しいです。 – Thad