【发布时间】:2012-08-04 20:00:52
【问题描述】:
我在视图文件夹下有两个文件夹。一个是 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 这样的 url 时 index.aspx 正在从 Home 呈现文件夹,但是当我键入 http://localhost:7221/DashBoard 之类的 url 时,找不到页面,但是如果我键入 http://localhost:7221/DashBoard/MyDash strong> 然后页面来了。
所以我的第二个路由代码有什么问题。为什么当我输入 http://localhost:7221/DashBoard 之类的 url 时没有出现 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 }
);
两个网址的相同模式....请详细讨论。谢谢
【问题讨论】:
-
“DashBord”应该是“DashBoard”?
-
我修正了拼写,但仍然没有运气。我认为路线名称并不重要,它可以是任何东西。
-
DashBoard/{action}/{id}匹配任何以“DashBoard”开头的 URL。如果没有传入第二个参数,则该操作默认为“MyDash”,因此http://localhost/Dahsboard有效。如果路由不以“DashBoard”开头,则该模式不匹配,然后检查下一个路由映射是否匹配。下一个路由映射非常通用,任何具有 0 到 3 个路由参数(例如 /foo 或 /foo/bar 或 /foo/foo/bar)的东西都会被它捕获。 -
否您在更新中重写路线将不起作用。第 4 个参数将否定第 3 个参数。此方法重载中的第 4 个参数设置了可以接受哪些值的约束,因此此映射将仅匹配带有“DashBoard”的路由,而其中带有“Home”的路由根本不会匹配到全部。所以第三个参数中指定的默认控制器在所有情况下都会被完全忽略。
-
...重新措辞,如果 URL 没有传入控制器,您的第三个参数(在您的重写中)会说使用“Home”,但您的第四个参数是这样说的URL 必须 传入一个控制器名称“DashBoard”作为 URL 的第一部分,否则这里根本没有匹配 - 它会继续检查下一个路由映射,由下一个 routes.MapRoute 进行匹配。
标签: asp.net-mvc