2010-02-19 6 views
2

Jouer avec la nouvelle fonctionnalité de réécriture d'url (ish) pour les formulaires Web, mais j'ai des problèmes pour essayer de déclarer les paramètres comme facultatifs.Paramètres d'URL facultatifs avec routage d'URL dans des formulaires Web

Voici le scénario. J'ai une fonction de recherche qui accepte deux paramètres, sku et nom. Idéalement, j'aimerais que l'URL de cette fonction de recherche soit/products/search/skuSearchString/nameSearchString. J'ai aussi plusieurs pages de gestion qui doivent correspondre à des choses comme/products/management/ou/products/summary /. En d'autres termes, les deux derniers paramètres de l'URL doivent être facultatifs - il peut y avoir une chaîne de recherche, deux ou aucune.

Voilà comment je l'ai déclaré mon URL virtuelle:

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

et a ajouté les paramètres par défaut suivants:

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

J'ai deux problèmes avec cette configuration. Le plus pressant est que l'url semble attendre un paramètre sku. Donc,/products/summary/ne peut pas être trouvé mais/products/summary/anyTextAtAll/correspond à la bonne page. Vous obtenez le même résultat si les valeurs par défaut sont définies sur "/" ou "". Comment puis-je m'assurer que les paramètres sku et les paramètres du produit sont facultatifs?

La seconde est plus d'un intérêt. Idéalement, j'aimerais que l'url sache si elle a une chaîne de recherche de produit ou une chaîne de recherche d'URL. La façon évidente de faire ceci est de faire en sorte que l'un ou l'autre par défaut soit une valeur que je peux simplement prendre et ignorer, mais y a-t-il une façon plus simple de le gérer?

Répondre

1

Je ne suis pas sûr d'avoir compris tout à la question, mais j'ai quelques commentaires sur ce que vous avez montré jusqu'à présent:

La manière dont vous définissez les valeurs par défaut semble incorrect. Vous définissez d'abord un dictionnaire de valeurs par défaut avec une valeur pour "sku". Vous êtes alors en remplaçant le dictionnaire de valeur par défaut avec une valeur pour "produit".

Il est peu probable que la valeur par défaut "/" corresponde à ce que vous voulez. Dans ce cas, il semble que vous vouliez une valeur par défaut de "" (chaîne vide).

Essayez quelque chose comme:

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

Mes compétences VB sont plutôt faibles, de sorte que la syntaxe je l'ai montré peut-être pas tout à fait exact.

Je pense que si vous changez ces deux, alors vous devriez être bon à faire.

Questions connexes