ASP.NET MVC两个控制器同名,如何指定视图位置

时间:2016-09-21 06:51:32

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我在不同的命名空间中有两个同名的控制器

-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()中传递路径定位但是......看起来很难看。

有人可以帮我这个吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

你需要有区域来实现这样的功能。一个好的开始链接是:

Areas

此外,您需要更改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
    {
        ...
    }
}