2016-06-10 29 views
5

Controller:come codificare '/' in ASP.NET MVC Razor

public ActionResult Tool(string id) 
{ 
    // Code goes here . . 
} 

Vista:

<a href="/Home/@item.Type/@Url.Encode(item.Title)" id="toolTitleLink">@item.Title</a> 

Dal codice di cui sopra @item.Title può avere caratteri speciali come '/' collegamento campione è http://localhost:39727/Home/Tool/C+Compiler+For+The+Pic10%2f12%2f16+Mcus quando provo a navigare verso quel collegamento, non è stato chiamato Tool Controller. Ho usato @Url.Encode ma non è stato ancora chiamato Controller.

+1

È possibile catturare tutti i simboli in ** id ** dopo */Home/Strumento/* parte con percorso di catchall. Vedi questo [risposta] (http://stackoverflow.com/a/6328758/1770952) –

+0

Grazie @IvanGritsenko Funziona ma voglio applicarlo a più azioni, devo creare un percorso personalizzato per ogni azione? – simpleProgrammer

risposta

2

Purtroppo anche se si utilizza System.Uri.EscapeDataString invece di Url.Encode in questo modo:

<a href="/Home/@item.Type/@System.Uri.EscapeDataString(item.Title)" id="toolTitleLink">@item.Title</a> 

La pagina visualizzata avrà le barre codificate (guardare nella 'vista origine' della pagina) il browser ancora li decodifica.

si hanno due opzioni, per quanto posso vedere:

  1. utilizzare un carattere diverso - Crea il Tuo fuga (per così dire;)) - per esempio usando tilda (~) o qualsiasi altra cosa URL valid character che si desidera, per sostituire la barra in avanti.

  2. Creare un percorso speciale per l'azione con a catch-all at the end e analizzare le cose dall'azione.