我在不同的命名空间中有两个同名的控制器
-Controllers
--AdminCp
---AccountController.cs
--Cp
---AccountrController.cs
相同的视图位置结构
-Views
--AdminCp
---Account
----Login.cshtml
--Cp
---Account
----Login.cshtml
我的帐户控制器包含登录方法
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));
但是当我尝试Login
中的Cp namespace
行动路线时,我正在从AdminCp namesapce
http://example.com/cp/account/login ---> /views/admincp/account/login.cshtml
我知道我可以在View()
中传递路径定位但是......看起来很难看。
有人可以帮我这个吗?提前谢谢!
答案 0 :(得分:1)
你需要有区域来实现这样的功能。一个好的开始链接是:
此外,您需要更改RouteConfig:
context.MapRoute(
"Default",
"{area}/{controller}/{action}/{id}",
new { area = "MyOneWay", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
更进一步,ypou可以让你的控制器以下面定义的方式:
namespace MyApp.Areas.MyOneWay.Controllers
{
public class HomeController : Controller
{
...
}
}
namespace MyApp.Areas.MySecondWay.Controllers
{
public class HomeController : Controller
{
...
}
}