我正在尝试使用ASP.NET 4.0 WebForms Routing。这是我的RegisterRoutes功能:
void RegisterRoutes(RouteCollection routes)
{
routes.Ignore("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("GoodInfo", "catalog/good/{good}", "~/GoodInfo.aspx");
routes.MapPageRoute("GoodGroup", "catalog/group/{group}", "~/default.aspx");
}
对于像/catalog/group/{group}
这样的页面,一切都可以。但是catalog/good/{good}
页面存在问题。
第一件奇怪的事:当我打开这个页面时,它会调用两次。所以我看到了Page.RouteData.Values["good"]
的值。Page.RouteData.Values["good"]
中的第一次有正确的值(我的goodId),但第二次我得到了字符串值"WebResource.axd"!
所以我的高速JavaScript在页面上不起作用。当我点击高滑动图像时,页面会重新加载,而不是执行JavaScript。
我添加了这行routes.Ignore("{resource}.axd/{*pathInfo}");
,但对我没有帮助。有什么想法吗?
我已经解决了我的问题!该解决方案由两部分组成。首先,我更改了中的脚本定义
<script type="text/javascript" src="../scripts/something.js"></script>
至
<script type="text/javascript" src="/../scripts/something.js"></script>
感谢MilkyWayJoe提供的解决方案。
其次,我添加了忽略路由
routes.Ignore("catalog/good/{resource}.axd/{*pathInfo}");
而不是:
routes.Ignore("{resource}.axd/{*pathInfo}");
所以我的网络资源在http://mysite.com/catalog/good/41
这样的页面上没有更多的路由
此外,我在页面上有类似http://mysite.com/catalog/good/41/event/seq/1
的脚本事件。为了捕捉所有参数,我将此添加到我的路线规则中
routes.Ignore("catalog/good/{good}/{*query1}");
routes.Ignore("catalog/good/{good}/{query1}/{*query2}");
routes.Ignore("catalog/good/{good}/{query1}/{query2}/{*query3}");
routes.Ignore("catalog/good/{good}/{query1}/{query2}/{query3}/{*query4}");
不要忘记,您的Ignore
声明必须放在MapPageRoute
声明之前:
routes.Ignore("catalog/good/{resource}.axd/{*pathInfo}");
routes.MapPageRoute("GoodInfo", "catalog/good/{good}", "~/GoodInfo.aspx");`enter code here`