2012-02-29 115 views
0

我尝试使用ASP.NET 4.0 WebForms路由。这里是我的RegisterRoutes功能:ASP.NET 4.0 WebForms路由Javascript不起作用

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"]有正确的值(my goodId),但第二次我得到字符串值“WebResource.axd”!

所以我的highslide JavaScript不能在页面上工作。当我点击highslide图像时,页面会重新加载而不是执行JavaScript。

我增加了这一行routes.Ignore("{resource}.axd/{*pathInfo}");但它没有帮助我。有任何想法吗?

+1

我有一个类似的问题在我的应用程序为了“修复”它,我添加了在我们的页面上改变了所有资源(图片,CSS和JS)的引用链接,所以不是''我写过类似''script type =”text/javascript“src =”/../ scripts/something.js“>'。请注意脚本源代码中的额外斜杠。 VS会抱怨,但我会在运行时正常工作。我花了一段时间才弄明白这一点,我不得不尝试不同的路径组合,直到我终于得到这样的路径。希望对你有效。 – MilkyWayJoe 2012-03-02 20:11:34

回答

1

我已经解决了我的问题!该解决方案由2部分组成。 首先,我改变了我的脚本定义从

<script type="text/javascript" src="../scripts/something.js"></script> 

<script type="text/javascript" src="/../scripts/something.js"></script> 

感谢MilkyWayJoe FOT该解决方案。

其次我加忽略路由

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`