Area中AdminAreaRegistration如下:
1 public class AdminAreaRegistration : AreaRegistration 2 { 3 public override string AreaName 4 { 5 get 6 { 7 return "Admin"; 8 } 9 } 10 11 public override void RegisterArea(AreaRegistrationContext context) 12 { 13 context.MapRoute( 14 "Admin_default", 15 "Admin/{controller}/{action}/{id}", 16 new { controller="Manage", action = "Index", id = UrlParameter.Optional } 17 ); 18 } 19 }
Global.asax中如下设置:
1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 "Default", // 路由名称 7 "{controller}/{action}/{id}", // 带有参数的 URL 8 new { controller = "Manage", action = "Index", id = UrlParameter.Optional } // 参数默认值 9 ); 10 11 } 12 13 protected void Application_Start() 14 { 15 AreaRegistration.RegisterAllAreas(); 16 17 RegisterGlobalFilters(GlobalFilters.Filters); 18 RegisterRoutes(RouteTable.Routes); 19 }
运行时提示
未找到视图“Index”或其母版视图,或没有视图引擎支持搜索的位置。搜索了以下位置:
~/Views/Manage/Index.aspx
~/Views/Manage/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Manage/Index.cshtml
~/Views/Manage/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
两个 路由 都把 命名空间带上, context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller="Manage", action = "Index", id = UrlParameter.Optional },
new string[] { "控制器的命名空间" }
);
Global.asax 中的 也加上。
我在路由中加上命名空间,如下所示
1 public override void RegisterArea(AreaRegistrationContext context) 2 { 3 context.MapRoute( 4 "Admin_default", 5 "Admin/{controller}/{action}/{id}", 6 new { controller="Manage", action = "Index", id = UrlParameter.Optional }, 7 new string[] { "MvcApplication15.Areas.Admin.Controllers" } 8 ); 9 }
还是出现同样的错误
@TannySiu:
检查一下你的地址,或者真的有问题, 贴出来看看
@Qlin: 需要我贴什么资料?我现在做测试,就新建了一个MVC3的程序,然后添加Area,增加了一个控制器ManageController和一个视图Index,然后就修改AdminAreaRegistration和Global.asax,想测试一下Area中的ManageController中的Index视图做为起始页,很简单的一个测试
@TannySiu:
贴地址 ,浏览器中的地址
@Qlin: 地址怎么贴法
@TannySiu:
好吧,浏览器中的地址,请求的地址
@TannySiu:
routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = "Manage", action = "Index", id = UrlParameter.Optional } // 参数默认值 );
这个 加了命名空间没?
@Qlin:
Global.asax中也加了
1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 "Default", // 路由名称 7 "{controller}/{action}/{id}", // 带有参数的 URL 8 new { controller = "manage", action = "Index", id = UrlParameter.Optional }, // 参数默认值 9 new string[] { "MvcApplication15.Areas.Admin.Controllers" } 10 ); 11 12 }
@TannySiu:
那 views 中 有没有这个页面
@Qlin: Area下有View还是最外层的View,Area下的肯定有的
@TannySiu:
好吧 ,它访问哪个view,就检查哪个,我要 吐血了
这个是目录图,ManageController下的Index也是有的,浏览器中直接输入地址也可以访问,就是无法做为运行时的起始页
@TannySiu:呃,我觉的是这样,你的
routes.MapRoute( "areasDefault", // 路由 "", //这里要空白 new { controller = "manage", action = "Index", id = UrlParameter.Optional }, // 参数默认值 new string[] { "MvcApplication15.Areas.Admin.Controllers" } );
MVC那个项目属性→Web→特定页→Admin,这样就可以了
routes.MapRoute( "areasDefault", // 路由 "", //这里要空白 new { controller = "manage", action = "Index", id = UrlParameter.Optional }, // 参数默认值 new string[] { "MvcApplication15.Areas.Admin.Controllers" } );
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional},
namespaces:new string[]{"MVCUI.Areas.自己Area的名称.Controllers"}
).DataTokens.Add("Area","自己Area的名称");
}
牛逼 佩服