2009-11-30 4 views
2

J'ai l'itinéraire suivant enregistré;Paramètres de codage d'URL dans ActionLink?

 routes.MapRoute(
      "LocationsByArea",            
      "Locations/{system}/{storage}/{area}",   
      new { controller = "StorageLocation", action = "Index" }, 
      null 
     ); 

... et le code suivant à mon avis;

<%= Html.ActionLink("Platser", "Index", "StorageLocation", new { system = Model.System, storage = Model.Storage, area = item.Name }, null)%> 

Mon problème est lorsque "zone = item.Nom" contient un deux-points, par ex. "Zone 4: 1". Si je clique sur le lien rendu, j'obtiens l'erreur HTTP 400, Bad reqest. Je suppose que je dois coder mon paramètre de zone d'une certaine manière, mais je ne peux pas comprendre comment. Toute aide est appréciée.

Merci!

Répondre

0

Pouvez-vous pas seulement utiliser

Server.UrlEnconde(item.Name) 

Ou suis-je manque quelque chose?

Dans votre routage, vous devrez peut-être également utiliser Server.UrlDecde même si je pense qu'il devrait décoder pour vous sur demande.

Essayez d'utiliser le Routing Debugger pour voir ce que le routeur URL est passé se, alors vous pouvez voir où le décodage doit se

+0

J'ai utilisé « zone = Url.Encode (item.Name) » mais je reste obtenir la même erreur ... –

+0

Je pense que vous aurez à UrlDecode à l'autre bout en le relisant. Avez-vous essayé cela? – Sheff

+0

Oui, j'ai, mais je ne parviens pas dans le contrôleur. –

0

ASP.NET 3.5 SP1 et les versions antérieures ont un certain nombre de restrictions sur les URL sont valides. Dans ASP.NET 4, la plupart de ces problèmes ont été résolus (ou sont au moins personnalisables via web.config). Je pense que le caractère deux-points, même lorsqu'il est codé, ne peut pas être autorisé dans ASP.NET 3.5 SP1 et plus tôt en raison de problèmes de sécurité. Autoriser les deux-points peut être un problème de sécurité lors de la vérification des fichiers, car ils sont une syntaxe peu connue pour NTFS Alternate Data Streams.

Je recommande d'essayer de choisir un caractère autre qu'un deux-points à ces fins. Peut-être qu'une virgule, un point-virgule ou un signe égal pourrait fonctionner à la place?

1

intégré dans le codage/décodage ne fonctionne pas, alors je vous suggère de rouler votre propre, comme ceci:

namespace MyProject.Helpers 
{ 
    public static class JobNameHelper 
    { 
     public static string JobNameEncode(string jobname) 
     { 
      return jobname.Replace(":", "---colon---"); 
     } 

     public static string JobNameDecode(string jobname) 
     { 
      return jobname.Replace("---colon---", ":"); 
     } 

    } 
}