Une façon de faire est la suivante sur votre chaîne
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
Maintenant, vous pouvez passer le cleanString
(pour les titres, noms, etc.) dans le ActoinLink/Paramètres Url.Action et cela fonctionnera très bien.
Le modèle a été pris de http://snipplr.com/view/18414/string-to-clean-url-generator/
Je ne suis pas à 100% sur le modèle Regex, si un héros Regex peut sonner et offrir un meilleur qui serait génial. De tester le Regex, il ne correspond pas à des espaces, mais cela ne devrait pas poser de problème car la première ligne remplace tous les espaces par des traits d'union.
Mise à jour:
Pour utiliser ce code, vous devez configurer vos itinéraires pour accepter des paramètres supplémentaires.
Nous utiliserons un titre d'article de blog comme exemple.
routes.MapRoute(
"", // Route name
"View/{ID}/{Title}", // URL with parameters
new { controller = "Articles", action = "View"} // Parameter defaults
);
Dans vos vues ASP.NET MVC, vous pouvez effectuer les opérations suivantes:
<%= Html.ActionLink("View Article", "View", "Articles", new { ID = article.ID, Title = Html.SanitizeTitle(article.Title) }, null) %>
Dans l'exemple précédent, j'utilise SanitizeTitle
comme 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;
}
Je ne suis pas le héros regex mais je pense que ce serait mieux: input = Regex.Replace (entrée, @ "[| \\ /]", "-"); // Remplacer les caractères "break" par "-" input = Regex.Replace (entrée, @ "[^ a-zA-Z0-9 -_. ~]", ""); // Remplacer les caractères non sécurisés (RFC3986) par "" input = input.Trim (new [] {'-', '_', '.', '~'}). ToLower(); // Ajoute les caractères non-alphanumériques avant et arrière et convertit en minuscules – JohannesH
Crap ... Pas de sauts de ligne dans les commentaires. – JohannesH