为什么可以';Visual Studio折叠包含Razor语法的Javascript函数?
Visual Studio中的.cshtml文件如下所示: 注意为什么可以';Visual Studio折叠包含Razor语法的Javascript函数?,javascript,razor,visual-studio-2013,Javascript,Razor,Visual Studio 2013,Visual Studio中的.cshtml文件如下所示: 注意createTabStrip可以折叠,但是createTeachersTab不能。为什么会这样 编辑:它似乎与razor语法有关。我取出了所有的@标志,并且CreateTacherStab能够折叠。展开我的评论 您通常不希望在Razor视图中定义函数。相反,定义它们并从外部JavaScript文件导入它们。如果需要JavaScript中C#的信息,可以在Razor部分中创建JavaScript中的全局配置对象,然后呈现该部分 函数
createTabStrip
可以折叠,但是createTeachersTab
不能。为什么会这样
编辑:它似乎与razor语法有关。我取出了所有的
@
标志,并且CreateTacherStab
能够折叠。展开我的评论
您通常不希望在Razor视图中定义函数。相反,定义它们并从外部JavaScript文件导入它们。如果需要JavaScript中C#的信息,可以在Razor部分中创建JavaScript中的全局配置对象,然后呈现该部分
函数库js
function createTeachersTab() {
...
read: {
url: config.teachers.newTabUrl
}
...
}
Views/Shared/_JavaScriptConfig.cshtml
这将在HTML文档的
中呈现为部分
<script type="text/javascript">
var config = {
teachers: {
newTabURL: '@Url.Action("Teachers", "Users")'
}
};
</script>
编辑:我也完全认识到这并不能解决VisualStudio中的代码崩溃问题,这似乎是一个解析错误。真正的解决方案是“不要在Razor视图中定义JavaScript函数”,因为这被认为是不好的做法。你也可以突出显示块并按ctrl+m,ctrl+h折叠块好问题,我注意到VS在js中还没有完全解决折叠问题。如果您折叠该文件,然后再次打开它,它可能会起作用。@asvenno,不幸的是,这不起作用。我认为更好的问题可能是,为什么在函数定义中需要使用Razor语法?URL之类的东西应该是配置的,在这里你有一个Razor视图,它基本上会吐出一个JavaScript对象文字。@GregBurghardt我如何从JS函数访问Razor视图?你不需要这样做。Razor视图只是常规页面的一部分。它创建一个JavaScript文本,然后您可以从函数中引用它。我将在几分钟后发布一个答案,告诉你我的意思。谢谢,这将真正减少我视图的文件大小(现在接近1000多行)。为什么在Razor视图中定义javascript函数被认为是一种不好的做法?@SotirisZegiannis:将javascript函数放在Razor视图中意味着浏览器无法缓存代码,只需添加通过网络发送的位。在某些情况下,你可以违反这条规则,但我的第一反应是把它们放在自己的档案中,除非我找到一个非常非常非常非常好的理由不这样做。我没有想到。谢谢@GregBurghardt的回复。这非常有效。执行此操作一次后,出现可折叠按钮。
config.teachers.newTabUrl