Playing with the new(ish) url rewriting functionality for web forms, but I’m running into trouble trying to declare parameters as optional.
Here’s the scenario. I’ve got a search function which accepts two parameters, sku and name. Ideally I’d like the URL for this search function to be /products/search/skuSearchString/nameSearchString. I also have various management pages that need to map to things like /products/management/ or /products/summary/. In other words, the last two parameters in the URL need to be optional – there might be one search string, or two, or none.
This is how I’ve declared my virtual URL:
Friend Const _VIRTUALURL As String = "products/{action}/{sku}/{*product}"
And added the following defaults:
Me.Defaults = New Web.Routing.RouteValueDictionary(New With {.sku = "/"})
Me.Defaults = New Web.Routing.RouteValueDictionary(New With {.product = "/"})
I have two problems with this setup. The most pressing is that the url seems to expect an sku parameter. So, /products/summary/ cannot be found but /products/summary/anyTextAtAll/ maps to the correct page. You get the same result whether the defaults are set to “/” or “”. How do I ensure both sku and product parameters are optional?
The second is more a matter of interest. Ideally, I’d like the url to be able to tell whether or not it’s got a product search string or a url search string. The obvious way to do this is to make one or the other default to a value I can just pick up and ignore, but is there a neater way of handling it?
I’m not sure I entirely understood the question, but I have some comments about what you’ve shown so far:
The manner in which you’re setting defaults seems incorrect. You’re first setting a default value dictionary with a value for “sku”. You’re then replacing the default value dictionary with a value for “product”.
A default value of “/” is unlikely to be what you want. In this case it sounds like you want a default value of just “” (empty string).
Try something like:
My VB skills are rather weak, so the syntax I showed might not be exactly right.
I think that if you change both of these then you should be good to go.