如何更改我的地图路线,以便我可以拥有另一个目录,而不仅仅是控制器和操作。
我想要的是在控制器之前有另一个目录,这样我就可以按照“模块”
分离控制器 routes.MapRoute(
"Default", // Route name
"{module}/{controller}/{action}/{id}", // URL with params
new { module = "module", controller = "controller", action = "Index", id = ""}
这就是我想要的,但代码不起作用。我还需要更改以更改MapRoute吗?
答案 0 :(得分:4)
您是否考虑过查看ASP.NET MVC 2的Areas功能?它可以满足您将站点划分为不同“模块”的要求。
Walkthrough: Organizing an ASP.NET MVC Application using areas
答案 1 :(得分:1)
我没有更好的解决方案,但会尝试实现自己的ViewEngine。
如果您的控制器在模块中,那么无法解析太多标准的ASP.NET MVC约定和路由。
我认为你应该实现自己的ViewEngine来支持它。
例如:
public class ModuleViewEngine: WebFormViewEngine
{
public ModuleViewEngine()
{
ViewLocationFormats = new[]
{
"~/views/{2}/{1}/{0}.aspx",
"~/views/{2}/{1}/{0}.ascx",
"~/views/Shared/{1}/{0}.aspx",
"~/views/Shared/{1}/{0}.ascx",
};
MasterLocationFormats = new[]
{
"~/views/{1}/{0}.master",
"~/views/Shared/{0}.master",
"~/views/{2}/{1}/{0}.master",
"~/views/{2}/Shared/{0}.master",
};
}
public override ViewEngineResult FindPartialView(ControllerContext controllerContext,
string partialViewName, bool useCache)
{
//coede
}
public override ViewEngineResult FindView(
ControllerContext controllerContext,
string viewName, string masterName, bool useCache)
{
//code
}
}
我们重新定义ViewLocationFormats和MasterLocationFormats 数组以容纳额外的参数(区域)。视图位置使用标准 字符串格式化占位符。第一个占位符表示操作 名称。第二个占位符是控制器名称和最终占位符, 是模块名称(如果已指定)。
FindPartialView和FindView方法,因此我们也必须覆盖它们。
因为我们的控制器现在将驻留在Controllers文件夹的子文件夹中,所以我们必须注册其他控制器名称空间:
ControllerBuilder.Current.DefaultNamespaces.Add( “Module.Controllers.something”);
这是必需的,因为默认的ControllerBuilder不希望反映出来 在将路径与特定路线匹配时,整个装配寻找控制器 控制器。