[英]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 }
);
問題是這給網址如下:
和
但我希望這樣:
問題是當我將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.