我是MVC中区域术语的新手,我想使用它。我有以下目录指向区域中的控制器。
Areas > Admin > Controllers > AdminController
当我想访问AdminController的Index Action时,我需要访问http://localhost/Admin/Admin。我想摆脱第二个“管理员”。我只想输入http://localhost/Admin/。我怎么能这样做?
AdminAreaRegistration.cs具有以下MapRoute
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
答案 0 :(得分:2)
您尚未为控制器指定默认值,因此除非您将其包含在网址中,否则路由引擎无法识别您要导航到的控制器。您可以通过为控制器名称
提供默认值来解决此问题context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
);
虽然这意味着../Admin
将导航到Index()
的{{1}}方法,但仍然意味着如果您要导航到AdminController
中的其他方法,那么您的网址需要AdminController
,这可能不是你想要的。
区域的目的是对控制器和方法进行逻辑分组。例如,购物车应用可能有../Admin/Admin/AnotherMethod
,用户可以在其中导航到ProductsController
以显示产品列表,或../Product
以显示产品的详细信息。但是应用可能需要其他方法供供应商创建和编辑他们的产品,因此您可以创建一个单独的../Product/Details/1
区域,其中Suppliers
将导航到他们的产品列表,../Suppliers/Products
将允许他们更新其产品的详细信息。
在../Suppliers/Products/Edit/1
区域中设置AdminController
并没有多大意义,如果它包含与管理任务相关的一般方法(以及路由定义),我建议它应该是Admin
然后是HomeController