1、我的网站的后台目录为:admin,后台默认页为/home/index/
访问后台的默认地址为:/admin/,完整路径为:localhost:/admin/home/index
2、网站的默认地址为:localhost:/home/index
我修改了Controllers和Routing的命名空间如下:
routes.MapRoute(
"admin", // 路由名称,这个只要保证在路由集合中唯一即可
"admin/{controller}/{action}/{id}", //路由规则,匹配以Admin开头的url
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, //
namespaces: new string[] { "admin" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "demo" }
);
Controllers:
文件夹: admin,内容:HomeController.cs 命名空间:admin
文件夹:Home,内容: HomeController.cs 命名空间:demo
Views:
文件夹:Home,内容:index.cshtml
文件夹:admin,内容index.cshtml
问题:当我访问localhost:/admin/的时候,应该为:localhost:/admin/Home/index
但是现在显示的页面为localhost:/home/index
请问这种多层级文件夹路径应该如设置,才能正常把views呈现出来?
这个问题我还是自己找到了解决方案,我是新手,所以做成了ASP.NET WEB的运行机制,正确的运行机制如下:
利用Area区域把admin做成一个子系统的模版。
然后在生成的区域中会存在一个路由文件:AdminAreaRegistration
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "Demo.Controllers" }
//就算添加了区域,如果不修改命名控件,控制器的名称仍然会冲突
);
}
那么Admin模版中的所有Controllers的命名控件都要修改为:Demo.Controllers
这种机制后,才能有效解决我上边的问题!
如何指定默认网站与区域网站的链接?
在ASP.NET MVC中有三个默认的RouteValue名称,分别是controller、action与area,其中controller与Action参数是必要的,剩余的area这个AouteValue就是当需要置顶Area的时候才必须要添加的。
如果要生成生成Admin区域下的Home控制器的Index动作,可以使用下边这种语法:
@Html.ActionLink("Admin的控制器", "Index", new { Controller = "Home", area = "Admin" })
如果要用Hml.RenderAction赋值方法来装入部分视图属性,运行相同的技巧即可:
@Html.Action("Index","Home",new {area="Admin"})
area路由值是在AdminAreaRegistration类别中的AreaName属性中所设置的值
注意路由注册的顺序,会优先匹配先注册的。
按照我上边的路由的话,如果是/home/index 应该默认为admin文件夹下的,但是现在默认的是第二个选项
@imluzhi: 只有localhost://admin/才会默认是admin文件夹下的。否则是走第二个路由的。