我在查看文件夹下有两个文件夹。一个是Home,它有index.aspx文件 视图文件夹中另一个名为DashBoard的文件夹,它有MyDash.aspx
我的路由代码在global.asax中看起来像
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"DashBoard", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "DashBoard", action = "MyDash", id = UrlParameter.Optional } // Parameter defaults
);
}
所以当我输入类似 http:// localhost:7221 / 或 http:// localhost:7221 / Home 的网址时,会从主页渲染index.aspx文件夹,但当我输入网址,如 http:// localhost:7221 / DashBoard ,然后找不到页面,但如果我键入 http:// localhost:7221 / DashBoard / MyDash 然后页面即将到来。
所以我的第二个路由代码出了什么问题。当我输入类似 http:// localhost:7221 / DashBoard 的网址时,为什么MyDash.aspx不会出现。怎么了?
我需要在第二个路由代码中更改什么?
请看一下......我是MVC的新手。感谢
当我在global.asax文件中更改路由条目时,它开始工作。 你能解释一下为什么......
routes.MapRoute(
"DashBoard",
"DashBoard/{action}/{id}",
new { controller = "DashBoard", action = "MyDash", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
我可以用这种方式编写路由代码吗
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "DashBoard", action = "MyDash", id = UrlParameter.Optional }
);
两个网址的相同模式....请详细讨论。感谢
答案 0 :(得分:1)
路由名称(第一个参数)对调用的操作/控制器没有影响。
然而,您的2种路线模式(路线的第2个参数.MapRoute)是相同的:
"{controller}/{action}/{id}"
...所以将与第二个模式匹配的任何内容都会被第一个模式捕获。因此,它们都被第一个地图定义映射。
http://localhost:7221/Home
有效,因为它与第一个模式匹配,并且可能是您的Home控制器中存在Index操作。
http://localhost:7221/DashBoard/MyDash
有效,因为即使它与第一条路线匹配,它也会通过URL传递的路由参数(DashBoard / MyDash)覆盖默认操作/控制器(Home / Index)。
http://localhost:7221/DashBoard
不起作用,因为它被第一个路由模式拾取,但你没有传入一个动作名称,所以它寻找默认 - 索引 - 我猜你没有在DashBoard控制器中设置。
更新(如何解决问题):
因此,如果您希望http://localhost:7221/DashBoard
使用名为MyDash的操作映射到名为DashBoard的Controller,同时仍然允许{controller}/{action}/{id}
选择其他模式,请删除您的第二条路线,并将其作为第1条路线:
routes.MapRoute(
"DashBoard",
"DashBoard/{action}/{id}",
new { controller = "DashBoard", action = "MyDash", id = UrlParameter.Optional }
);
这是一个更具体的路线,所以它需要在全能{controller}/{action}/{id}
之前。 不以/DashBoard
开头的任何内容都不会被它接收。