我使用ASP.NET MVC应用程序进行一些路由时遇到了一个有趣的问题。我正在构建一个CMS,我有一个全能的处理程序,它接受URL并检查数据库中是否有一些匹配的内容。如果是这样,它会显示它,否则我们会得到404。
现在我已经完成了一些测试数据的工作,我开始编写一个快速的管理系统。我以为我会使用一些新的Area功能烘焙到MVC 2中,因此我创建了一个名为Admin的区域,其中包含一个名为Home的控制器。 现在我有一个问题,就是在请求应用程序根路径时返回管理区域中的默认HomeController。
问题是没有其他HomeController用于'root'应用程序(托管所有区域的应用程序),而是root将被重定向到我的catch-all处理程序并从数据库填充。所以现在控制器工厂正在返回最佳匹配控制器,它认为是管理区域,我真正需要的是它根本不匹配 - 就像之前一样。
除了将Admin HomeController重命名为其他内容之外,还有其他解决方案吗?
答案 0 :(得分:4)
在“管理”区域中,打开AdminAreaRegistration.cs
在控制器所在位置添加正确的命名空间:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }*,
new string[] { "Stridh.Areas.Admin.Controllers" }*
);
}
现在在global.asax中执行相同操作:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "Stridh.Controllers" } // Parameter defaults
);
答案 1 :(得分:0)
编辑...(抱歉,最后一个答案不在话题)。
在黑暗中拍摄。尝试更改默认的maproute ....
routes.MapRoute(
“默认”,
“{控制器} / {行动} /(编号)”,
new {controller =“Home”, area =“”,action =“Index”,id =“”}
或者也许是area = null。
或将控制器从家更改为其他内容。