MVC3 Razor从HtmlString中删除脚本标记

时间:2011-10-05 19:43:35

标签: javascript asp.net-mvc-3 razor

如果是ajax请求,我有一个方法可以将javascript添加到部分视图的末尾。 我的问题是,当返回脚本时,脚本标签已被删除,我想要执行的功能是用纯文本写的。

if (httpContext.Request.IsAjaxRequest())
        {
            script = "MyNamespace.globals.initFunctions.push(function() { " + script + " });";
            return new HtmlString(@"<script type=""text/javascript"">" + script + "</script>");
        }

所以,而不是获得理想的结果

<script type="text/javascript">MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); });</script>

我以纯文本格式获得MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); });

可能是什么原因?

修改

使用Html.Raw()尝试它没有帮助。虽然脚本字符串确实包含脚本标记,但在呈现时仍会将其删除。

    @{
    string script = ViewUtilities.AddScript("MyNamespace.init();", this.ViewContext.HttpContext);
}

    @Html.Raw(script);

编辑2:

现在我已经尝试在这样的视图中编写所有内容,

<script type="text/javascript">
    MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); });
</script>

它仍会删除脚本周围的标记并将其呈现为纯文本。 我不知道从哪里开始......

当我用Firebug检查响应时,它看起来很好,但是看看它不是。

3 个答案:

答案 0 :(得分:2)

HTML正在编码,它与ASP.NET MVC一起自动发生。

使用@Html.Raw("htmlstring")应该为您提供字符串的原始HTML值而不会剥离标记。

答案 1 :(得分:1)

您想使用@Html.Raw(whatever function you call)

我想你也可能想要返回MvcHtmlString.Create(fullscript);

答案 2 :(得分:0)

如果将其转换为HtmlHelper方法,它将起作用。按如下方式更改您的ViewUtilities课程:

public static class ViewUtilities
{
    public static MvcHtmlString AddScript(this HtmlHelper htmlHelper, string script)
    {
        if (htmlHelper.ViewContext.HttpContext.Request.IsAjaxRequest())
            return new MvcHtmlString(@"<script type=""text/javascript"">" + script + "</script>");
        return new MvcHtmlString("");
    }
}

然后,在web.config文件夹中的Views文件中(以及任何区域的任何视图文件夹中),将以下内容添加到namespaces中的<pages pageBaseType="System.Web.Mvc.WebViewPage">列表中元素:

<add namespace="{namespace where ViewUtilities class is located}"/>

最后,在您看来:

@Html.AddScript("MyNamespace.init();")