2010-06-10 4 views
0

J'ai un itinéraire avec plusieurs paramètres facultatifs. Ce sont des termes de recherche possibles dans différents domaines. Ainsi, par exemple, si je les champs clés, itemtype et texte puis-je avoir dans global.asax:Comment soumettre Nothing comme valeur de route vers ASP MVC

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

Mon action prend des paramètres facultatifs:

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) 

Il vérifie ensuite si la clé et le texte les chaînes ont une valeur non nulle (et non vide) et ajoutent des termes de recherche à la requête db si nécessaire.

Cependant, est-il possible d'envoyer une valeur nulle pour, par exemple, Clé mais toujours envoyer une valeur pour Texte? Si oui, à quoi ressemble l'URL? (Admin.aspx/Search // 0/Foo ne fonctionne pas :))

Je sais que je peux gérer cela en utilisant un tableau de paramètres à la place, mais je me demandais si cela était possible en utilisant le type d'itinéraire décrit? Je pourrais bien sûr définir une autre valeur comme équivalente à null (par exemple, un espace /% 20) mais est-il possible d'envoyer une valeur nulle dans l'URL? Je ne le soupçonne pas, mais je pensais voir si quelqu'un en connaissait un. J'utilise ASP MVC 2 pour ce projet.

Répondre

1

Dans votre itinéraire, utilisez UrlParameter.Optional comme valeur par défaut:

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