2016-06-10 13 views
5

Kontroler:Jak zakodować '/' w ASP.NET MVC Razor

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

Widok:

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

z kodu powyżej @item.Title może mieć znaków specjalnych takich jak '/' Link próbka jest http://localhost:39727/Home/Tool/C+Compiler+For+The+Pic10%2f12%2f16+Mcus kiedy próbuję nawigować do tego linku, nie został wywołany Tool Controller. Użyłem @Url.Encode, ale nadal nie został wywołany Controller.

+1

Możesz przechwycić wszystkie symbole w ** id ** po */Home/Tool/* part z trasą catchall. Zobacz [odpowiedź] (http://stackoverflow.com/a/6328758/1770952) –

+0

Dzięki @IvanGritsenko Działa, ale chcę zastosować go do wielu akcji, czy muszę utworzyć niestandardową trasę dla każdej akcji? – simpleProgrammer

Odpowiedz

2

Niestety nawet jeśli używasz System.Uri.EscapeDataString zamiast Url.Encode tak:

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

wytopione strona będzie mieć ukośniki kodowanych (patrz w „źródle widzenia” strony) przeglądarka będzie nadal je rozszyfrować.

Masz dwie możliwości, o ile widzę:

  1. Użyj innego charakteru - zrobić własną ucieczkę (że tak powiem;)) - na przykład za pomocą Tilda (~) lub cokolwiek innego URL valid character chcesz, aby zastąpić ukośnik w przód.

  2. Utwórz specjalną trasę do działania z a catch-all at the end i parsuj rzeczy z akcji.