Маршрутизация веб-форм asp.net: необязательные параметры - PullRequest
13 голосов
/ 23 сентября 2010

Я хочу добавить дополнительные параметры в мою таблицу маршрутизации. Например, я хотел бы, чтобы пользователи просматривали каталог продукции следующим образом: http://www.domain.com/browse/by-category/electronics/1,2,3 и т. Д.

Теперь я создал маршрут, подобный этому:

            routes.MapPageRoute(
           "ProductsBrowse",
            "browse/{BrowseBy}/{Category}",
            "~/Pages/Products/Browse.aspx"
        );

Проблема, однако, в том, что когда пользователь вводит http://www.domain.com/browse, я бы хотел, чтобы он представил другую страницу, где он мог бы выбрать способ просмотра. Поэтому параметры {BrowseBy} и {Category} не будут использоваться.

Есть ли способ обойти это, чтобы создать отдельные маршруты для каждого из сценариев?

Спасибо за ваше время! С уважением, Mark

Ответы [ 3 ]

20 голосов
/ 20 августа 2011

Я только что столкнулся с этим вопросом и знал, что должен быть способ сделать это.Существует -

MapPageRoute имеет перегрузку, которая позволит вам указать значения по умолчанию.Вот пример использования, основанный на вашем коде:

routes.MapPageRoute(
       "ProductsBrowse",
        "browse/{BrowseBy}/{Category}",
        "~/Pages/Products/Browse.aspx",
        false,
        new RouteValueDictionary { { "Category", string.Empty } }
    );

Так что, если пользователь не определит категорию, этот маршрут все равно будет пройден.Проблема, с которой я сталкиваюсь при использовании двух отдельных маршрутов, заключается в том, что у меня есть настройки ссылок вокруг моего сайта, которые генерируются по имени маршрута, и у вас не может быть двух маршрутов с одинаковым именем.

Вот хорошая документация из MSDN: здесь

6 голосов
/ 06 февраля 2015

попробуйте это:

routes.MapPageRoute(
           "ProductsBrowse",
            "browse/{BrowseBy}/{Category}/{*queryvalues}",
            "~/Pages/Products/Browse.aspx"
        );
3 голосов
/ 23 сентября 2010

Я бы просто создал отдельный маршрут.

Тем не менее, вы можете определить собственный RouteHandler, который на основе определенного вами соглашения автоматически отправляет эти особые случаи, как если бы у вас был другой маршрут.

В качестве альтернативы вы можете использовать пользовательский RouteHandler вместе с соглашением, чтобы избежать необходимости указывать конкретную страницу в ваших маршрутах.Это эквивалентно тому, что делает asp.net MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...