HtmlHelper编码&作为&

时间:2014-09-29 23:42:35

标签: c# asp.net-mvc html-helper html-encode

如何停止&在以下字符串中被编码为&安培;

public static class GoogleMaps
{
    public static MvcHtmlString DisplayMap(this HtmlHelper html,
                        GoogleMapData mapData, int width, int height)
    {
        const string GOOGLE_MAP_API = "xxx";
        const string GOOGLE_MAP_DOMAIN = "www.google.com/maps";
        const string GOOGLE_MAP_ACTION = "/embed/v1/view";

        var tag = new TagBuilder("iframe");
        tag.MergeAttribute("width", width.ToString());
        tag.MergeAttribute("height", height.ToString());
        tag.MergeAttribute("style", "border:0");
        tag.MergeAttribute("frameborder", "0");

        string googleMapUrl = String.Format(
                                @"{0}://{1}{2}?key={3}&center={4}",
                                "https",
                                GOOGLE_MAP_DOMAIN,
                                GOOGLE_MAP_ACTION,
                                GOOGLE_MAP_API,
                                mapData.Coordinates.ToString()
                                            );
        tag.MergeAttribute("src", googleMapUrl);

        return MvcHtmlString.Create(tag.ToString());

    }
}

这会生成一个带有SRC的iframe,如下所示:

src="https://www.google.com/maps/embed/v1/view?key=myAPIkey&center=52.377736, 4.915779"

GoogleMaps忽略中心(GPS坐标)

我想要的是:

src="https://www.google.com/maps/embed/v1/view?key=myAPIkey&center=52.377736, 4.915779" 

2 个答案:

答案 0 :(得分:1)

HtmlHelper 假设对&符号进行编码。实际上,在属性中使用时的&符应该被编码为有效的HTML。 W3C验证器会告诉你同样的事情。

您的代码将正常运行,浏览器将理解它,服务器也将如此。

不相信我?请参阅以下链接:

(特别是" HTML中的链接(或任何HTML属性值") http://mrcoles.com/blog/how-use-amersands-html-encode/

http://www.htmlhelp.com/tools/validator/problems.html

答案 1 :(得分:0)

您可以使用System.Web.HttpUtility.HtmlDecode(tag.Tostring())尝试生成Html标记字符串,然后在MvcHtmlString.Create()例程中使用此字符串。