叫我有一些地區在我的ASP.NET MVC3應用:區域控制器正在從根本要求
namespace MyProject.Areas.myarea
{
public class myareaAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "myarea";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"myarea_default",
"myarea/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}
這個區域包含與「微笑」行動「你好」控制器。
在爲整個項目Global.asax文件我有:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
所以,當我要求 「本地主機/ myarea/hello /的微笑」,它調用預期適當的控制器。
但是!當我請求「localhost/hello/smile」時,它會調用hello控制器STILL!因此,它不在myarea/Views文件夾中查找視圖,而是在〜/ Views文件夾中查找「root」(非區域)級別的項目。
我該如何解決這個問題,所以服務器會拋出一個404異常,找不到資源,就像我要求的不存在的控制器一樣?
UPD:控制器面積在命名空間:
namespace MyProject.Areas.myarea.Controllers
{
public class HelloController : Controller
...
}
控制器中的 「根」 級是在命名空間:
namespace MyProject.Controllers
{
public class AnotherRootController : Controller
...
}
所以我在Global.asax中嘗試這樣做:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new [] { "MyProject.Controllers" } //Namespace
);
}
我認爲這會限制這條路徑爲「根」-l僅限於evel控制器,因爲它們位於MyProject.Controllers命名空間中。這沒有用。區域控制器仍然在被請求調用,而沒有再次調用。
可能有人能解釋,爲什麼?
在MVC4 「默認」 路線declaraton從Global.asax中移動到〜/ App_Start/RouteConfig.cs /的RegisterRoutes() –