Обычно я использую области для обработки этого.
var url = Url.Action("Index", "Home", new {Area = "Myarea"});
var url = Url.Action("Index", "Home", new {Area = "area2"});
если и как надстройку другие проекты, как таким образом и можно использовать пользовательские ViewEngine. таким образом первым добавить правила маршрутизации, как это:
routes.MapRoute(
name: "app",
url: "{application}/{controller}/{action}/{id}",
defaults: new {application = "MyApplication1", controller = "Panel", action = "Index", id = UrlParameter.Optional }
);
второй: добавить виртуальные пути ур приложения:
public class CustomAreaViewEngine : VirtualPathProviderViewEngine
{
public CustomAreaViewEngine()
{
MasterLocationFormats = new string[]
{
"~/Views/{1}/{0}.master",
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.master",
"~/Views/Shared/{0}.cshtml",
"~/Areas/{2}/Views/{1}/{0}.master",
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.master",
"~/Areas/{2}/Views/Shared/{0}.cshtml",
"~/Areas/{2}/{2}/Views/{1}/{0}.master",
"~/Areas/{2}/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/{2}/Views/Shared/{0}.master",
"~/Areas/{2}/{2}/Views/Shared/{0}.cshtml",
"~/{2}/Views/{1}/{0}.master",
"~/{2}/Views/{1}/{0}.cshtml",
"~/{2}/Views/Shared/{0}.master",
"~/{2}/Views/Shared/{0}.cshtml",
"~/{2}/{2}/Views/{1}/{0}.master",
"~/{2}/{2}/Views/{1}/{0}.cshtml",
"~/{2}/{2}/Views/Shared/{0}.master",
"~/{2}/{2}/Views/Shared/{0}.cshtml",
};
ViewLocationFormats = new string[]
{
"~/Areas/{2}/Views/{1}/{0}.aspx",
"~/Areas/{2}/Views/{1}/{0}.ascx",
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.aspx",
"~/Areas/{2}/Views/Shared/{0}.ascx",
"~/Areas/{2}/Views/Shared/{0}.cshtml",
"~/Areas/{2}/{2}/Views/{1}/{0}.aspx",
"~/Areas/{2}/{2}/Views/{1}/{0}.ascx",
"~/Areas/{2}/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/{2}/Views/Shared/{0}.aspx",
"~/Areas/{2}/{2}/Views/Shared/{0}.ascx",
"~/Areas/{2}/{2}/Views/Shared/{0}.cshtml",
"~/{2}/Views/{1}/{0}.aspx",
"~/{2}/Views/{1}/{0}.ascx",
"~/{2}/Views/{1}/{0}.cshtml",
"~/{2}/Views/Shared/{0}.aspx",
"~/{2}/Views/Shared/{0}.ascx",
"~/{2}/Views/Shared/{0}.cshtml",
"~/{2}/{2}/Views/{1}/{0}.aspx",
"~/{2}/{2}/Views/{1}/{0}.ascx",
"~/{2}/{2}/Views/{1}/{0}.cshtml",
"~/{2}/{2}/Views/Shared/{0}.aspx",
"~/{2}/{2}/Views/Shared/{0}.ascx",
"~/{2}/{2}/Views/Shared/{0}.cshtml",
"~/Views/{1}/{0}.aspx",
"~/Views/{1}/{0}.ascx",
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.aspx",
"~/Views/Shared/{0}.ascx",
"~/Views/Shared/{0}.cshtml"
};
PartialViewLocationFormats = ViewLocationFormats;
}
и у sould изменить global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CustomAreaViewEngine());
}
и, наконец, вы должны реализовать контроллер ur в основном пространстве имен приложений. Вам все еще нужно объяснять так?
if u want u может разработать CustomAreaViewEngine, который может помещать приложения ur в пользовательский каталог, такой как MyModules.
Почему вы не пытаетесь «Области» https://msdn.microsoft.com/en-us/library/ee671793(v=vs.100).aspx –