如何将Nothing作为路由值提交给ASP MVC

时间:2010-06-10 08:58:54

标签: asp.net asp.net-mvc url-routing

我有一个带有几个可选参数的路线。这些是不同领域的可能搜索术语。所以,例如,如果我有字段键,项类型和文本,那么我在global.asax:

routes.MapRoute( _
        "Search", _
        "Admin.aspx/Search/{Key}/{ItemType}/{Text}", _
        New With {.controller = "Admin", .action = "Search" .Key = Nothing, .ItemType = Nothing, .Text = Nothing} _
    )

我的操作采用可选参数:

Function Search(Optional ByVal Key As String = Nothing, _
                Optional ByVal ItemType As Integer = 0, _
                Optional ByVal Text As String = Nothing, _
                Optional ByVal OtherText As String = Nothing)

然后检查Key和Text字符串是否具有非null(和非空)值,并根据需要将搜索项添加到db请求中。

但是,是否可以为例如Key发送空值但仍然发送Text的值?如果是这样,URL是什么样的? (Admin.aspx / Search // 0 / Foo不起作用:))

我知道我可以使用参数数组来处理这个问题,但是想知道这是否可以使用所描述的路由类型?我当然可以将一些其他值定义为等效于null(例如,空格/%20)但是有没有办法在URL中发送空值?我不怀疑,但我想我是否知道有人知道。

我正在为这个项目使用ASP MVC 2.

1 个答案:

答案 0 :(得分:1)

在您的路线中,使用UrlParameter.Optional作为默认值:

routes.MapRoute( _
    "Search", _
    "Admin.aspx/Search/{Key}/{ItemType}/{Text}", _
    New With { .controller = "Admin", .action = "Search", _
               .Key = UrlParameter.Optional, .ItemType =  UrlParameter.Optional, _ 
               .Text = UrlParameter.Optional } _
)