Подтвердить что ты не робот

Asp.net webforms routing: необязательные параметры

Я хочу добавить необязательные параметры в свою таблицу маршрутизации. Например, я бы хотел, чтобы пользователи просматривали каталог продуктов следующим образом: 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} не будут использоваться.

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

попробуйте следующее:

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