Una forma de hacer esto es el siguiente en la cadena de
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
Ahora usted puede pasar el cleanString
(para los títulos, nombres, etc.) en el ActoinLink/Parámetros de acción del Url. Y funcionará de maravilla.
El patrón fue tomada desde http://snipplr.com/view/18414/string-to-clean-url-generator/
No estoy 100% en el patrón de expresión, si algún héroe Regex pueda intervenir y ofrecer una mejor uno que sería grande. Desde la prueba de Regex, no coincide con los espacios, pero esto no debería ser un problema porque la primera línea reemplaza todos los espacios con guiones.
Actualización:
Para utilizar este código, tiene que configurar sus rutas para aceptar parámetros adicionales.
Utilizaremos el título de un artículo de blog como ejemplo.
routes.MapRoute(
"", // Route name
"View/{ID}/{Title}", // URL with parameters
new { controller = "Articles", action = "View"} // Parameter defaults
);
En sus puntos de vista ASP.NET MVC, a continuación, puede hacer lo siguiente:
<%= Html.ActionLink("View Article", "View", "Articles", new { ID = article.ID, Title = Html.SanitizeTitle(article.Title) }, null) %>
En el ejemplo anterior, lo uso como un SanitizeTitle
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;
}
no soy ningún héroe de expresiones regulares pero creo que esto sería mejor: input = Regex.Replace (input, @ "[| \\ /]", "-"); // Reemplazar caracteres "quebrados" por "-" input = Regex.Replace (input, @ "[^ a-zA-Z0-9 -_. ~]", ""); // Reemplazar los caracteres restantes no seguros (RFC3986) con "" input = input.Trim (new [] {'-', '_', '.', '~'}). ToLower(); // Recorta los caracteres no alfanuméricos iniciales o finales y convierte a minúsculas – JohannesH
Mierda ... Sin saltos de línea en los comentarios. – JohannesH