簡體   English   中英

ASP.NET MVC兩個具有相同名稱的控制器,如何指定視圖位置

[英]ASP.NET MVC two controllers with same name, how to specify view location

我在不同的命名空間中有兩個名稱相同的控制器

-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));

但是,當我嘗試路由到Cp namespace Login動作時,我正在從AdminCp namesapce獲取視圖

http://example.com/cp/account/login ---> /views/admincp/account/login.cshtml

我知道我可以在View()傳遞路徑locatin,但是...看起來很丑。

有人可以幫我嗎? 提前致謝!

您需要具有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
    {
        ...
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM