0

I'm try to use ASP.NET 4.0 WebForms Routing. Here is my RegisterRoutes function:

 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");
    }

For pages like /catalog/group/{group} everything is ok. But there are problems with pages catalog/good/{good}.

First strange thing: when I open this page it calls twice. So I see what value comes for Page.RouteData.Values["good"]. First time in Page.RouteData.Values["good"] has the right value (my goodId) but the second time I got the string value "WebResource.axd"!

So my highslide JavaScript does not work on the page. And when I click on highslide image the page reloads instead of executing the JavaScript.

I added this line routes.Ignore("{resource}.axd/{*pathInfo}"); but it didn't helped me. Any ideas?

1
  • 1
    I got a similar problem in on of my apps and to "fix" it, I added changed the reference links to all resources (images, css and js) on our pages, so instead of <script type="text/javascript" src="../scripts/something.js"></script> I've written something like this <script type="text/javascript" src="/../scripts/something.js"></script>. Note the extra slash on the script source. VS will complain about this, but I will work fine in runtime. I took me a while to figure this out and I had to try different combinations of paths until I finally got this path like this. Hope it works for you. Commented Mar 2, 2012 at 20:11

1 Answer 1

1

I have solved my problem! The solution consists of 2 parts. Firstly I changed my scripts definition from

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

to

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

Thanks MilkyWayJoe fot that solution.

Secondly I added Ignore Routing

routes.Ignore("catalog/good/{resource}.axd/{*pathInfo}");

instead of:

routes.Ignore("{resource}.axd/{*pathInfo}");

So my web resources have no more routes on pages like http://mysite.com/catalog/good/41

Also I have script events on the page like http://mysite.com/catalog/good/41/event/seq/1. To catch all parameters I add to my route rules this

   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}");

And don't forget that your Ignore declarations must be placed before MapPageRoute declarations:

routes.Ignore("catalog/good/{resource}.axd/{*pathInfo}");
routes.MapPageRoute("GoodInfo", "catalog/good/{good}", "~/GoodInfo.aspx");`enter code here`
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.