簡體   English   中英

在MVC3中,是否可以在不同的區域中使用相同的控制器名稱?

[英]Is it possible, in MVC3, to have the same controller name in different areas?

在MVC3中,我有以下幾個方面:

  • 移動
  • 砂箱

然后我像這樣路由地圖:

    context.MapRoute(
        "Sandbox_default",
        "Sandbox/{controller}/{action}/{id}",
        new { controller = "SandboxHome", action = "Index", id = UrlParameter.Optional }

    context.MapRoute(
        "Mobile_default",
        "Mobile/{controller}/{action}/{id}",
        new { controller = "MobileHome", action = "Index", id = UrlParameter.Optional }
    );

問題是這給網址如下:

HTTP://本地主機:58784 /移動/ MobileHome

HTTP://本地主機:58784 /沙盒/ SandboxHome

但我希望這樣:

HTTP://本地主機:58784 /手機/家
HTTP://本地主機:58784 /沙盒/主頁

問題是當我將SandboxHome-Controller重命名為Home,而MobileHome-Controller重命名為Home時,它將提供所需的URL,它將無法編譯,說它有兩個類用於HomeController。

如何在不同區域使用相同的控制器名稱?

是。

正如此博客文章所述: http//haacked.com/archive/2010/01/12/ambiguous-controller-names.aspx

假設您調用了RegisterAllAreas和Visual Studio生成的AreaRegistration文件。 您需要做的就是在全局ASAX中使用默認路由上的命名空間來防止沖突。

//Map routes for the main site. This specifies a namespace so that areas can have controllers with the same name
routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new[]{"MyProject.Web.Controllers"}
 );

只要將區域控制器保留在自己的名稱空間中即可。 這會奏效。

是的,但你必須改變你的路線:

context.MapRoute(
    "Default",
    "{area}/{controller}/{action}/{id}",
    new { area = "Mobile", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

您也可以保留兩條路線,但不要忘記在默認值中定義area

重要

當然,您必須將控制器保留在它們自己的區域名稱空間中:

namespace MyApp.Areas.Mobile.Controllers
{
    public class HomeController : Controller
    {
        ...
    }
}

namespace MyApp.Areas.Sandbox.Controllers
{
    public class HomeController : Controller
    {
        ...
    }
}

檢查MSDN上的此鏈接,然后查看walktrough。 並且不要忘記查看這篇關於區域注冊的MSDN文章 ,因為您將不得不調用RegisterAllAreas()方法。

既然你仍然希望保留原始的非區域控制器,你還應該閱讀這篇Phil Haack的文章如何做到這一點(Credit應該在@Rob的回答中首先指向這篇博文)。

暫無
暫無

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

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