如果是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检查响应时,它看起来很好,但是看看它不是。
答案 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();")