内置的方法来编码从Url.Action返回的网址中的&符号?

时间:2010-05-24 17:20:44

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing

我正在使用Url.Action在文档类型为XHTML严格的网站上生成包含两个查询参数的网址。

Url.Action("ActionName", "ControllerName", new { paramA="1" paramB="2" })

产生

/ControllerName/ActionName/?paramA=1&paramB=2

但我需要它来生成带有&符号转义的网址:

/ControllerName/ActionName/?paramA=1&paramB=2

Url.Action返回带有&符号未转义的网址这一事实会破坏我的HTML验证。我目前的解决方案是只使用转义的&符号手动替换Url.Action返回的URL中的&符号。是否有内置或更好的解决方案来解决这个问题?

4 个答案:

答案 0 :(得分:7)

这对我有用:

Html.Raw(Url.Action("ActionName", "ControllerName", new { paramA="1" paramB="2" }))

答案 1 :(得分:1)

您无法使用Server.HtmlEncode()

的任何原因
string EncodedUrl = Server.HtmlEncode(Url.Action("Action", "Controller", new {paramA = "1", paramB = "2"}));

http://msdn.microsoft.com/en-us/library/w3te6wfz.aspx

答案 2 :(得分:0)

我最终只为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));
        }
    }
}

答案 3 :(得分:0)

您似乎遇到了呈现网址的问题,而不是网址的生成问题。 URL中可以包含未编码的&符号,并且有些地方可能正是您所需要的。但是,在这种情况下,您要嵌入的HTML需要&符号和各种其他字符编码。

虽然帮助方法可以在视图中保存一些输入,但我总是发现在最后一刻可以完成任何显示编码,因此我总是使用真正的字符串/ URL,直到我需要它为止它被操纵以用于特定的输出格式。如果你在HtmlHelper中放置来自your answer的帮助扩展名,那么在实际需要之前,你就不会过早地对你的URL进行编码。

将其原始化为HTML:

// with MVC3 auto-encoding goodness
<%:Url.Action(...)%>
// old-school MVC
<%=Html.Encode(Url.Action(...))%>

要直接在视图中将它放在一个anchor / src属性中,你可能会使用Html.Encode或更少严格的选项:

<%=Html.AttributeEncode(Url.Action(...))%>