2011-07-15 3 views
0

J'ai un problème étrange. J'ai une action de contrôleur qui prend deux paramètres optionnelsProblème de routage MVC3 avec paramètre nullable

Function Index(sectionID As Integer?, title As String) As ActionResult 

    Return View() 
End Function 

Je puis ajouté un itinéraire spécifique pour cette méthode d'action pour que nous obtenons de jolies urls pour cette page

routes.MapRoute(_ 
     "By_Section", _ 
     "home/{sectionID}/{title}", _ 
     New With {.controller = "Home", .action = "Index", .sectionID = Nothing}, 
     New With {.sectionID = "\d+"} 
     ) 

tout cela fonctionne. Toutefois, lorsque je suis sur une page où le sectionID est défini (par exemple http://localhost/home/index/1/test), le code suivant produit une sortie impaire.

<%= Url.Action("Index", "Home")%> 

Au lieu de montrer http://localhost/home/index comme on pouvait s'y attendre, il montre http://localhost/home/index/1/test. Il semble donc qu'il récupère le sectionID et le titre de l'URL actuelle et les insère automatiquement dans l'URL.

Comment puis-je empêcher cela?

Merci

James

Répondre

1

Oui, ce comportement est normal, le système de routage réutiliser les valeurs des paramètres de la requête en cours si vous n'avez pas fourni une nouvelle valeur explicitement. La meilleure option lors du rendu des liens est de spécifier des valeurs explicites pour tous vos paramètres de routage.

<%= Url.Action("Index", "Home", new { sectionID = (int?)null }) %> 
+0

Merci pour la réponse. Alors, comment puis-je forcer un paramètre nul parce que dans mon cas un null sectionID a un sens? – James

+0

J'ai mis à jour ma réponse – devdigital