Home >> c#, MVC >> MVC 中Areas与{根}Controller共存时,如何在Areas中调用{root}的控制器

MVC 中Areas与{根}Controller共存时,如何在Areas中调用{root}的控制器

当MVC中使用Areas来对应用划分区域的时候,如何在{根}和不同的Areas中创建链接呢?如果{根}的Controller中包含 HomeController,同时不同的Areas中也可能包含HomeController时,如何才能区分将要调用的是哪一个HomeController呢?

Q: 如何在Areas中调用{根}的控制器

step 1. {根}的RouteMap中加入路径定义

或者

routes.MapRoute(“Root”, “{controller}/{action}/{id}”, new {controller=”Home”, actino=”Index”, id=””});

step 2. 代码中调用方式:

@Url.Action(“Logon”, “Account”, new{area=””});

通过指明area为空来指明链接

 

Q: 找到了多个与名为“Home”的控制器匹配的类型。

当Areas中存在同名的控制器时(比如HomeController),往往会出现类似错误:
找到了多个与名为“Home”的控制器匹配的类型
如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间来搜索匹配此请求的控制器,则会发生此情况。如果是这样,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由
解决办法:
step 1. 重命名根控制器名称
把{根}的同名控制器改名,比如HomeController改为DefaultController,相应的需要修改/Views/Home为/Views/Default以及RouteMap中的Controller,由Home改为Default

step 2. Areas中注册RouteMap时,指明Namesapce参数,如

context.MapRoute(
“area1_default”,
“area1/{controller}/{action}/{id}”,
new { action = “Index”, id = UrlParameter.Optional }
);

更改为:
context.MapRoute(
“area1_default”,
“area1/{controller}/{action}/{id}”,
new { action = “Index”, id = UrlParameter.Optional },
new string[]{“ddbiz.mvc.Areas.area1.Controllers”}
);


(原文链接 http://ddbiz.com/?p=1213)

留言/有话要说

Copyright © 2012 Dimensions Data Business. All rights reserved.
server process 3.538 seconds.
WP-Backgrounds Lite by InoPlugs Web Design and Juwelier Schönmann 1010 Wien