2010-02-19 101 views
2

为web表单使用新的(ish)url重写功能,但是我试图将参数声明为可选参数时遇到问题。在webforms中使用url路由的可选URL参数

这里是场景。我有一个搜索功能,它接受两个参数,SKU和名称。理想情况下,我希望此搜索功能的URL为/ products/search/skuSearchString/nameSearchString。我还有各种管理页面,需要映射到诸如/ products/management /或/ products/summary /之类的东西。换句话说,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 = "/"}) 

我有两个问题与此设置。最紧迫的是该网址似乎期望sku参数。因此,/ products/summary /无法找到,但/ products/summary/anyTextAtAll /会映射到正确的页面。无论默认设置为“/”还是“”,您都会得到相同的结果。我如何确保Sku和产品参数都是可选的?

第二个更值得关注。理想情况下,我希望url能够判断它是否有产品搜索字符串或网址搜索字符串。做到这一点的显而易见的方法是将其中一个或另一个默认设置为我可以接受并忽略的值,但是有没有更好的方法来处理它?

回答

1

我不知道我完全理解这个问题,但我对您到目前为止已经证明一些什么评论:

在你设置默认值的方式似乎不正确。您首先要为“sku”设置一个默认值字典。然后您将替换为默认值字典,其值为“产品”。

默认值“/”不可能是你想要的。在这种情况下,它听起来像你想要一个默认值“”(空字符串)。

试着这么做:

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

我的VB的技能是相当弱的,所以语法我表现可能不完全正确。

我认为,如果你改变这两个,那么你应该很好去。