Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ASP.NET MVC视图中包含脚本引用的最佳方式是什么?_Javascript_Asp.net Mvc_Markup - Fatal编程技术网

Javascript 在ASP.NET MVC视图中包含脚本引用的最佳方式是什么?

Javascript 在ASP.NET MVC视图中包含脚本引用的最佳方式是什么?,javascript,asp.net-mvc,markup,Javascript,Asp.net Mvc,Markup,如您所知,ASP.NET MVC将视图标记存储在视图目录中,该目录在层次结构上与ASP.NET MVC web应用程序中使用的URL路由不兼容。另一方面,在ASP.NET Web表单中(以及在ASP.NET MVC中),URL可以而且通常有嵌套的“目录”,或者更确切地说是路径分隔符,这与Web应用程序通常不是托管在URL的根路径中,而是托管在子目录中的事实相结合,即“/stuff/here/myactualap”,必须使用相对于应用程序根的脚本路径,而不是相对于URL根的脚本路径。然而,与此同时

如您所知,ASP.NET MVC将视图标记存储在视图目录中,该目录在层次结构上与ASP.NET MVC web应用程序中使用的URL路由不兼容。另一方面,在ASP.NET Web表单中(以及在ASP.NET MVC中),URL可以而且通常有嵌套的“目录”,或者更确切地说是路径分隔符,这与Web应用程序通常不是托管在URL的根路径中,而是托管在子目录中的事实相结合,即“/stuff/here/myactualap”,必须使用相对于应用程序根的脚本路径,而不是相对于URL根的脚本路径。然而,与此同时,VisualStudio脚本intellisense规定URL相对于正在编辑的文件进行映射

此外,我在使用runat=“server”虚拟化根路径以支持“~/”时遇到了很多问题,例如head标记也需要runat=“server”,这引入了各种其他约束

最后,还有一件事:如果除了intellisense ready风格之外还引用了jQuery之类的脚本的简化风格,VisualStudio将对此犹豫不决。因此,您几乎必须使用转义代码来阻止VS

因此,自VS 2005以来,我一直在Visual Studio 2010中使用此语法或其变体,用于在我的ASP.NET视图标记中包含脚本,以处理ASP.NET MVC视图文件(与实际URL不一致)的嵌套文件夹之间的差异以及需要使用jQuery的vsdoc风格,而不是缩小版本,以便让intellisense工作

<%if (false) { %>
<script src="../../Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<% } %>
<%= "<script type=\"text/javascript\"" src=\"" 
  + ResolveUrl("~/Scripts/jquery-1.4.1.min.js") + "\"></script>"%>

"%>
除了使用CDN URL,还有比这更好的方法吗?这很难看。我希望Microsoft现在能够解决这个问题,而不必求助于ScriptManager标记(它需要服务器端表单,并且使标记更加详细)


注意:我的问题不在于Intellisense支持,而在于上面代码中的最后一行,它必须发出一行,而不仅仅是使用真正的标记。但是,我也希望Intellisense支持就绪。

您可以在开发过程中提供类似的内容,这样它将向您展示Intellisense

<reference path="http://code.jquery.com/jquery-1.4.1.js"/>

我们使用。它也合并和缩小文件,并支持css(甚至)


还可以提供引用URL的方法:

<script src="<%= Links.Scripts.Map_js %>" type="text/javascript"></script>

如您所知,ASP.NET MVC将视图标记存储在视图目录中,该目录在层次结构上与ASP.NET MVC web应用程序中使用的URL路由不兼容

这是不正确的。您认为默认视图目录在哪些方面与路由不兼容

另一方面,在ASP.NET Web表单中(以及在ASP.NET MVC中),URL可以而且通常有嵌套的“目录”,或者更确切地说是路径分隔符,这与Web应用程序通常不是托管在URL的根路径中,而是托管在子目录中的事实相结合,即“/stuff/here/MyActualApp”“,必须使用相对于应用程序根的脚本路径,而不是相对于URL根的脚本路径。”

必须使用相对于应用程序根的脚本路径,而不是相对于URL根的脚本路径

root或Url是什么意思? MVC默认情况下不使用嵌套目录(除非您将RouteExistingFiles设置为true),URL具有嵌套目录意味着什么?MVC路由使用段而不是路径分隔符

应用程序通常不是托管在URL的根路径中,而是托管在子目录中 更准确地说,应用程序托管在不在根级别的vdir中。使用MVC 3和更低版本,您需要使用@Url.Content助手引用静态资源(css、javaScript)

使用MVC 4/Beta+Razor及更高版本,您不再需要使用@Url.Content帮助程序

此外,我在使用runat=“server”虚拟化根路径以支持“~/”时遇到了很多问题,例如head标记也需要runat=“server”,这引入了各种其他约束

千万不要在MVC应用程序中使用runat=“server”来虚拟化根路径

需要使用jQuery的vsdoc风格,而不是缩小版本,以便intellisense工作。 这同样是错误的。您不应直接引用vdoc版本。Visual Studio/VWD检测脚本文件的.vdoc版本何时存在并启用智能感知

你的助手方法可能是最好的途径。您可以修改我的助手方法


通常情况下,人们会注释掉用于开发的.min引用,而切换用于生产的注释,以使用简化版本。实际上,我们正在研究一种使用小型化/捆绑来切换开发/生产的方法。看见在ASP.NET MVC 4中,Razor已经变得足够智能,可以支持“~/”检测。希望VS11 IntelliSense工具能够跟上这一点

<script src="~/Scripts/Controls.js"></script>


同时,自从最初提出这个问题以来,VisualStudio工具和jQuery源代码(因为问题中使用了jQuery作为参考)都进行了大量修改。RickAndMSFT的回答当时并不适用。目前,他的回答是正确的,;然而,由于这是一个移动的目标,似乎到今年年底,人们将直接引用脚本,Razor和修订的VS工具将解决所有问题。

这如何解决实际脚本的应用程序根问题?使用还只能在vsdoc intellisense注释中工作,即在脚本本身内部。它也不会“关闭”jQuery脚本的小型化风格,这是VisualStudio的一个参考。请看我的博客,注意Squishit有一个.AddRemote(“~/Scripts/jquery-1.4.1-vsdoc.js“,”)方法。当debug为true时,当debug为f时,它将呈现/Scripts/jquery-1.4.1-vsdoc.js
<script src="~/Scripts/Controls.js"></script>