Необязательные параметры URL с маршрутизацией URL в веб-формах - PullRequest
2 голосов
/ 19 февраля 2010

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

Вот сценарий.У меня есть функция поиска, которая принимает два параметра, sku и name.В идеале, я бы хотел, чтобы 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.Очевидный способ сделать это - установить одно или другое значение по умолчанию для значения, которое я могу просто подобрать и проигнорировать, но есть ли более аккуратный способ его обработки?

1 Ответ

1 голос
/ 27 февраля 2010

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

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

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

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

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

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

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

...