Один из способов сделать это в вашей строке
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
Теперь вы можете передать cleanString
(для названий, имен и т. Д.) В параметры ActoinLink / Url.Action, и он будет отлично работать.
Шаблон был взят из http://snipplr.com/view/18414/string-to-clean-url-generator/
Я не на 100% отношусь к шаблону Regex, если какой-нибудь герой Regex может присоединиться и предложить лучший вариант, который был бы великолепен. После тестирования Regex он не соответствует пробелам, но это не должно быть проблемой, потому что первая строка заменяет все пробелы дефисами.
Обновление:
Чтобы использовать этот код, вам необходимо настроить маршруты для приема дополнительных параметров.
Мы будем использовать заголовок статьи блога в качестве примера.
routes.MapRoute(
"", // Route name
"View/{ID}/{Title}", // URL with parameters
new { controller = "Articles", action = "View"} // Parameter defaults
);
В представлениях ASP.NET MVC вы можете сделать следующее:
<%= Html.ActionLink("View Article", "View", "Articles", new { ID = article.ID, Title = Html.SanitizeTitle(article.Title) }, null) %>
В предыдущем примере я использую SanitizeTitle
в качестве HTML-помощника .
public static string SanitizeTitle(this HtmlHelper html, string originalString)
{
string cleanString = originalString.ToLower().Replace(" ", "-"); // ToLower() on the string then replaces spaces with hyphens
cleanString = Regex.Replace(cleanString, @"[^a-zA-Z0-9\/_|+ -]", ""); // removes all non-alphanumerics/underscore/hyphens
return cleanString;
}