我正在尝试在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外部文件提供。
答案 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