我有两个同名的控制器在不同的命名空间
-Controllers
--AdminCp
---AccountController.cs
--Cp
---AccountrController.cs
和相同的视图位置结构
-Views
--AdminCp
---Account
----Login.cshtml
--Cp
---Account
----Login.cshtml
My Account controllers包含Login方法
public ActionResult Login()
{
return View();
}
我还有自定义的RazorViewEngine
public ExtendedRazorViewEngine()
{
ViewLocationFormats = new[]
{
"~/Views/AdminCp/{1}/{0}.cshtml",
"~/Views/Cp/{1}/{0}.cshtml",
"~/Views/{1}/{0}.cshtml",
"~/Views/Layout/{0}.cshtml",
};
}
我的路由使用MvcCodeRouting
routes.MapCodeRoutes(typeof (Controllers.HomeController));
但是当我尝试路由到Cp namespace
中的动作Login
时,我正在从AdminCp namesapce
获得视图
http://example.com/cp/account/login ---> /views/admincp/account/login.cshtml
我知道我可以通过View()
的路径位置,但是…它看起来很丑。
您需要有area来实现这个功能。一个好的开始链接是:
区域同样,你需要改变你的RouteConfig:
context.MapRoute(
"Default",
"{area}/{controller}/{action}/{id}",
new { area = "MyOneWay", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
此外,你可以用下面定义的方式设置你的控制器:
namespace MyApp.Areas.MyOneWay.Controllers
{
public class HomeController : Controller
{
...
}
}
namespace MyApp.Areas.MySecondWay.Controllers
{
public class HomeController : Controller
{
...
}
}