Я пытаюсь создать приложение MVC с несколькими представлениями, но с использованием одного контроллера. Я начал с создания второго маршрута с другим свойством, которое я мог бы использовать для перенаправления во вторую папку.
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 всегда использует версию режима, независимо от того, какое представление отображается. Является ли это правильным направлением для достижения моей цели, если да, то чего мне не хватает, чтобы заставить Action Link работать должным образом. Ниже находится 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);
}
}