ASP.NET 4.0 веб-форм маршрутизации JavaScript не работает - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь использовать 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}");, но она мне не помогла. Есть идеи?

1 Ответ

1 голос
/ 05 марта 2012

Я решил свою проблему! Решение состоит из 2 частей. Сначала я изменил определение сценариев с

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

до

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

Спасибо MilkyWayJoe за это решение.

Во-вторых, я добавил Ignore Routing

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`
...