2010-09-06 1 views
0
routes.MapRoute("Archive.CityState", 
       "Archive/{City}/{State}/{OP1}/{OP2}", 
       new { controller = "Archive", action = "CityState", OP1 = UrlParameter.Optional, OP2 = UrlParameter.Optional }, 
       new { City="[a-zA-Z]+" ,State = @"[a-zA-Z]{2}", OP1 = @"[a-zA-Z]+" , OP2 [email protected]"\d{4}" }); 


public ActionResult CityState(string City, string State, string OP1, int OP2) 
     { 
      var x = City; 
      var y = State; 
      var OptionalParameter1= OP1; 
      var OptionalParameter2 = OP2; 
      return View(); 
     } 

Cela carte
Archive/Remond/WA/ChimieCartographie de la route ASP.NET MVC avec le paramètre d'URL en option

Archive/Remond/WA/Chimie/2010

Mais pas

Archive/Remond/WA

Quelqu'un peut-il aider? Merci.

Répondre

0

Ces contraintes empêchent de correspondre à ce que vous voulez:

OP1 = @"[a-zA-Z]+", 
OP2 = @"\d{4}" 

Comme les deux paramètres sont nécessaires. Modifiez votre expression régulière pour accepter des valeurs vides si vous souhaitez que cette route puisse être reconnue par Archive/Remond/WA. Souvenez-vous également que seul le paramètre peut être optionnel (vous ne pouvez pas avoir deux paramètres optionnels successifs car cela n'a aucun sens).

+0

Merci. En supprimant les contraintes, le problème disparaît immédiatement. Mais si la contrainte rend le paramètre nécessaire, pourquoi Archive/Remond/WA/Chemistry a-t-il fonctionné avec OP2 = @ "\ d {4}"? – stoto