2013-11-25 44 views
4

我有兩個名字相同的控制器,其中一個居住在「管理員」區域,另一個在默認區域(我相信這可以解決爲區域的空字符串)。如何指定控制器在HtmlHelper.Action(string,string,object)中調用的名稱空間?

以下調用:

HtmlHelper.Action("Action", "DuplicateController", new { parameterValue = "test" }); 

如下似乎並不能夠解決我的ProjectA.Controllers.DuplicateControllerProjectB.Controllers.DuplicateController之間的區別,即使我指定的區域爲「」把它加:

HtmlHelper.Action("Action", "DuplicateController", new { parameterValue = "test", area = "" }); 

我知道我應該能夠通過指定一個路徑,當我在應用程序啓動時註冊它們來解決這個問題,但是是否可以直接向控制器指定完全限定名稱空間我知道我需要在動作中調用正確的會見HOD?

例如像下面這樣就可以解決我的問題:

HtmlHelper.Action("Action", "ProjectB.Controllers.DuplicateController", new { parameterValue = "test" }); 

回答

3

像你的建議,我認爲你必須添加命名空間爲您的曖昧控制器的路線在RouteConfig.cs文件和你的AdminAreaRegistration .cs文件。有關示例,請參閱this StackOverflow post

因此,您可以將「命名空間」參數添加到默認路由,如上面的帖子中所示,或者爲每個「重複」控制器創建一個路由。

在你RouteConfig.cs

routes.MapRoute(
    name: "Duplicate", 
    url: "Duplicate/{action}/{id}", 
    defaults: new { controller = "Duplicate", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new[] { "MyMvcApplication.Controllers" } 
); 

而在你AdminAreaRegistration.cs

context.MapRoute(
    "Admin_Duplicate", 
    "Admin/Duplicate/{action}/{id}", 
    new { controller = "Duplicate", action = "Index", id = UrlParameter.Optional }, 
    new[] { "MyMvcApplication.Areas.Admin.Controllers" } 
); 
+0

謝謝,這是我落得這樣做。我認爲在helper方法中不允許使用名稱空間參數的原因是路由應該負責控制器操作的所有映射,這在原則上我同意,但在這種情況下稍微不方便。 –

相關問題