Un modo per farlo è il seguente sulla stringa
string cleanString = originalString.ToLower().Replace(" ", "-"); // ToLower() on the string thenreplaces spaces with hyphens
cleanString = Regex.Replace(cleanString, @"[^a-zA-Z0-9\/_|+ -]", ""); // removes all non-alphanumerics/underscore/hyphens
Ora si può passare il cleanString
(per titoli, nomi, ecc) nella ActoinLink/Url.I parametri di azione e funzionerà benissimo.
Il modello è stata presa dal http://snipplr.com/view/18414/string-to-clean-url-generator/
Io non sono al 100% sul modello Regex, se qualche Regex eroe può carillon e offrire uno migliore che sarebbe grande. Dal test del Regex, non corrisponde agli spazi, ma questo non dovrebbe essere un problema perché la prima riga sostituisce tutti gli spazi con trattini.
Aggiornamento:
Per utilizzare questo codice, è necessario configurare i percorsi per accettare parametri aggiuntivi.
Useremo un titolo di articolo del blog come esempio.
routes.MapRoute(
"", // Route name
"View/{ID}/{Title}", // URL with parameters
new { controller = "Articles", action = "View"} // Parameter defaults
);
Nel vostro punto di vista ASP.NET MVC, è possibile effettuare le seguenti operazioni:
<%= Html.ActionLink("View Article", "View", "Articles", new { ID = article.ID, Title = Html.SanitizeTitle(article.Title) }, null) %>
Nel precedente esempio, io uso SanitizeTitle
come HTML helper.
public static SanitizeTitle(this HtmlHelper html, string str)
{
string cleanString = originalString.ToLower().Replace(" ", "-"); // ToLower() on the string thenreplaces spaces with hyphens
cleanString = Regex.Replace(cleanString, @"[^a-zA-Z0-9\/_|+ -]", ""); // removes all non-alphanumerics/underscore/hyphens
return cleanString;
}
non sono un eroe regex ma penso che sarebbe meglio: input = Regex.Replace (input, @ "[| \\ /]", "-"); // Sostituisci i caratteri di "rottura" con "-" input = Regex.Replace (input, @ "[^ a-zA-Z0-9 -_. ~]", ""); // Sostituisce i caratteri rimanenti non sicuri (RFC3986) con "" input = input.Trim (new [] {'-', '_', '.', '~'}). ToLower(); // Taglia i caratteri non alfanumerici iniziali o finali e converti in caratteri minuscoli – JohannesH
Crap ... Nessuna interruzione di riga nei commenti. – JohannesH