如何从html编码脚本标记中停止<%=?

时间:2011-07-05 20:38:35

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

我正在尝试使用自定义HTML帮助器动态地将js添加到我的视图中。我面临的问题是以下服务器标签正在编码我的<和>到& lt和& gt。

    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    <%: Model.ProductName %>

    <%foreach (var script in Model.DynamicIncludes)
  {%>
      <%=Html.ScriptTag(Url.Content(script))%>
  <%} %>    

</asp:Content>

这就是我的助手的样子:

 public static class ScriptHelper
    {
        public static string ScriptTag(this HtmlHelper helper, string path)
        {
            return string.Format("<script src='{0}' type='text/javascript'/>", path);
        }
    }

当我查看html源时,脚本包括正在写入响应流,如下所示:

&lt;script src='../../Scripts/DataOutEventHandling.js' type='text/javascript'/&gt;

此应用程序使用ASP.NET MVC 2.0

编写

3 个答案:

答案 0 :(得分:2)

在格式化的值周围使用Html.Raw。您可以将东西放在合适的地方。 e.g。

<%=Html.Raw(Html.ScriptTag(Url.Content(script)))%>

http://msdn.microsoft.com/en-us/library/system.web.webpages.html.htmlhelper.raw(v=vs.99).aspx

答案 1 :(得分:0)

<%=Html.ScriptTag(Url.Content(script))%>不会编码。您可能使用执行HTML编码的<%:Html.ScriptTag(Url.Content(script))%>

请注意<%=<%:之间的区别。

答案 2 :(得分:0)

由于某种原因,脚本标记是嵌套的。在我的助手中,我添加了一个结束标记,而不是使用自关闭脚本标记,它解决了问题。

 public static string ScriptTag(this HtmlHelper helper, string path)
    {
        return string.Format("<script src='{0}' type='text/javascript'></script>", path);
    }