Я использую URL. Действие для генерации URL с двумя параметрами запроса на сайте, который имеет doctype строгого XHTML.
Url.Action("ActionName", "ControllerName", new { paramA="1" paramB="2" })
генерирует:
/ControllerName/ActionName/?paramA=1¶mB=2
но мне нужен он для генерации URL с амперсандом, которого оставляют:
/ControllerName/ActionName/?paramA=1&paramB=2
Факт тот URL. Действие возвращает URL с амперсандом не оставленные повреждения моя проверка HTML. Мое текущее решение состоит в том, чтобы просто вручную заменить амперсанд в URL, возвращенном из URL. Действие с завершенным амперсандом. Существует ли встроенное или лучшее решение этой проблемы?
В итоге я просто создал расширение для Url.Action под названием Url.ActionEncoded. Код выглядит следующим образом:
namespace System.Web.Mvc {
public static class UrlHelperExtension {
public static string ActionEncoded(this UrlHelper helper, StpLibrary.RouteObject customLinkObject) {
return HttpUtility.HtmlEncode(helper.Action(customLinkObject.Action, customLinkObject.Controller, customLinkObject.Routes));
}
public static string ActionEncoded(this UrlHelper helper, string action) {
return HttpUtility.HtmlEncode(helper.Action(action));
}
public static string ActionEncoded(this UrlHelper helper, string action, object routeValues) {
return HttpUtility.HtmlEncode(helper.Action(action, routeValues));
}
public static string ActionEncoded(this UrlHelper helper, string action, string controller, object routeValues) {
return HttpUtility.HtmlEncode(helper.Action(action, controller, routeValues));
}
}
}
Есть причины, по которым вы не можете использовать Server.HtmlEncode()
string EncodedUrl = Server.HtmlEncode(Url.Action("Action", "Controller", new {paramA = "1", paramB = "2"}));