为什么Visual Studio无法折叠包含Razor语法的Javascript函数?

Lin*_*son 15 javascript razor visual-studio-2013

我在Visual Studio中的.cshtml文件如下所示:

在此输入图像描述

请注意如何createTabStrip崩溃,但createTeachersTab不能.为什么是这样?

编辑:它似乎与剃刀语法有关.我拿出所有的@标志,createTeachersTab然后崩溃了.

Gre*_*rdt 5

扩展我的评论.

您通常不希望在Razor视图中定义函数.相反,定义它们并从外部JavaScript文件导入它们.如果您需要在JavaScript中使用C#中的信息,则可以在Razor partial中使用JavaScript创建全局配置对象,然后呈现该部分.

function_lib.js

function createTeachersTab() {
    ...
        read: {
            url: config.teachers.newTabUrl
        }
    ...
}
Run Code Online (Sandbox Code Playgroud)

查看/共享/ _JavaScriptConfig.cshtml

这将<head>在HTML文档中呈现为部分.

<script type="text/javascript">
    var config = {
        teachers: {
            newTabURL: '@Url.Action("Teachers", "Users")'
        }
    };
</script>
Run Code Online (Sandbox Code Playgroud)

然后,在JavaScript的其他任何位置,您都可以通过全局configJavaScript变量引用这些设置.

config.teachers.newTabUrl
Run Code Online (Sandbox Code Playgroud)

编辑:我也完全认识到这并没有解决Visual Studio中的代码崩溃问题,这似乎是他们最终的解析错误.真正的解决方案是"不要在Razor视图中定义JavaScript函数",因为这被认为是不好的做法.

  • @SotirisZegiannis:将 JavaScript 函数放在 Razor 视图中意味着浏览器无法缓存代码,而只会添加通过网络发送的位。总有一些情况你可以打破这个规则,但我的第一直觉是把它们放在自己的文件中,除非我找到一个*真的,真的,真的,真的*很好的理由不这样做。 (2认同)