如何在不查看脚本标签的情况下返回javascript内容?

时间:2012-02-03 20:03:47

标签: asp.net-mvc-3 razor

我正在尝试在ASP .NET MVC应用程序中本地化客户端Javascript。我已经解决这个问题的方法是我想从视图页面返回一个JavaScript对象。

这个想法与这里描述的非常类似: http://blogs.msdn.com/b/robj/archive/2009/03/12/localized-javascript-resources-with-mvc.aspx

从博客文章中我不清楚视图(或部分视图?)的样子。我想做这样的事情:

<script type = "text/javascript">
ForumsRes = 
{
    prompt_clearAbuseReason: <%=       AntiXss.JavaScriptEncode(Resource.prompt_clearAbuseReason) %>,    
    prompt_deleteReason: <%= AntiXss.JavaScriptEncode(Resource.prompt_deleteReason) %>,     
    prompt_pageExit: <%= AntiXss.JavaScriptEncode(Resource.prompt_pageExit) %>,    
    prompt_reportAbuseReason: <%= AntiXss.JavaScriptEncode(Resource.prompt_reportAbuseReason) %>,    
    prompt_stickyUntil: <%= AntiXss.JavaScriptEncode(Resource.prompt_stickyUntil) %>,    
    prompt_undeleteReason: <%= AntiXss.JavaScriptEncode(Resource.prompt_undeleteReason) %>,       
    rte_alreadyOpen: <%= AntiXss.JavaScriptEncode(Resource.rte_alreadyOpen) %>}
</script>

在视图定义中。通过在.cshtml文件中实际使用脚本标记,我可以对.cshtml文件进行外部引用,然后我将获得intellisense(根据http://weblogs.asp.net/scottgu/archive/2007/06/21/vs-2008-javascript-intellisense.aspx)。

但是,我想从另一个视图中引用这样的javascript(真的.cshtml文件):

<script type="text/javascript" src="@Url.Content("~/res/MyResources")"></script>

其中res / MyResources URL将(通过自定义路由)映射到调用提供JavaScript的视图(或部分视图)的控制器。我想问题是,我在视图中返回的内容包括标签。我想在设计时这样做,所以我可以获得智能感知。但是当javascript在运行时返回时,我想返回脚本标记脚本的视图(或部分视图)的内容。

正如你可能会说的那样,我在ASP .NET MVC上非常环保,所以希望我所说的是有道理的。有没有办法剥离控制器内的标签?我想我可以在客户端做一些事情(可能使用JQuery),但我宁愿把它作为一个vanilla javascript外部文件提供。

2 个答案:

答案 0 :(得分:1)

在您的控制器中,您需要设置Response.ContentType = "text/javascript";

我不知道你怎么能有intellisense而没有脚本标签输出。你可以做类似的事情:

@if(false) {
     <script>
}

javascript code here

@if(false) {
     </script>
}

编辑:只是关于安全性的说明,以这种方式访问​​的脚本文件可以在浏览器中跨域移动并且容易受到攻击,因此您应该避免任何敏感。

答案 1 :(得分:1)

我在MSDN ASP .NET论坛上找到了我想要的答案。这是答案:

http://forums.asp.net/p/1765704/4819373.aspx/1?p=True&t=634641505060799388