Необязательные параметры URL-адреса с маршрутизацией URL-адресов в веб-формах

Играю с новой функцией перезаписи URL-адресов для веб-форм, но у меня возникают проблемы с попыткой объявить параметры необязательными.

Вот сценарий. У меня есть функция поиска, которая принимает два параметра: артикул и имя. В идеале я бы хотел, чтобы URL-адрес этой функции поиска был /products/search/skuSearchString/nameSearchString. У меня также есть различные страницы управления, которые должны сопоставляться с такими вещами, как /products/management/ или /products/summary/. Другими словами, последние два параметра в URL-адресе должны быть необязательными — может быть одна строка поиска, две или ни одной.

Вот как я объявил свой виртуальный URL:

Friend Const _VIRTUALURL As String = "products/{action}/{sku}/{*product}"

И добавил следующие значения по умолчанию:

    Me.Defaults = New Web.Routing.RouteValueDictionary(New With {.sku = "/"})
    Me.Defaults = New Web.Routing.RouteValueDictionary(New With {.product = "/"})

У меня две проблемы с этой настройкой. Наиболее важным является то, что URL-адрес, похоже, ожидает параметр sku. Таким образом, /products/summary/ не может быть найден, но /products/summary/anyTextAtAll/ сопоставляется с правильной страницей. Вы получите тот же результат, если по умолчанию установлено значение «/» или «». Как сделать так, чтобы параметры sku и product были необязательными?

Второе более интересно. В идеале я хотел бы, чтобы URL-адрес мог определить, есть ли у него строка поиска продукта или строка поиска URL-адреса. Очевидный способ сделать это — установить одно или другое значение по умолчанию, которое я могу просто выбрать и игнорировать, но есть ли более аккуратный способ справиться с этим?


person Bob Tway    schedule 19.02.2010    source источник


Ответы (1)


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

То, как вы устанавливаете значения по умолчанию, кажется неправильным. Сначала вы устанавливаете словарь значений по умолчанию со значением для «sku». Затем вы заменяете словарь значений по умолчанию значением для "продукта".

Значение по умолчанию "/" вряд ли будет тем, что вам нужно. В этом случае это звучит так, как будто вы хотите, чтобы значение по умолчанию было просто "" (пустая строка).

Попробуйте что-то вроде:

Me.Defaults = New Web.Routing.RouteValueDictionary(New With {
    .sku = "",
    .product = "" }) 

Мои навыки VB довольно слабы, поэтому синтаксис, который я показал, может быть не совсем правильным.

Я думаю, что если вы измените оба из них, тогда все будет хорошо.

person Eilon    schedule 27.02.2010