繁体   English   中英

ASP.NET MVC相对路径而不会破坏JavaScript IntelliSense?

[英]ASP.NET MVC relative paths without breaking JavaScript IntelliSense?

向视图添加脚本通常涉及以下内容:

<script src="../../Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>

不幸的是,如果将应用程序部署在IIS 6下的虚拟目录中,则此方法不起作用。 这里讨论的替代方案包括使用带有“〜”的Url.Content动态解析路径,但这完全破坏了JS IntelliSense。

有没有办法解决这个问题,并使IntelliSense正常工作,而又不会失去在虚拟目录中部署应用程序的能力?

对于部署代码,您可以使用google ajax api加载JQuery。 建议使用它,因为它可以帮助您使用Google CDN来加载页面。

要获得智能感知,请将其添加到您的页面

<% if(false){ %>
    <script src="../../Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>
<%}%>

这不会被发出,因为它在if(false)内,但是智能感知会识别它

在VS2010中,引用虚拟文件夹/目录中的* vsdoc.js文件并使Intellisense无需使用CDN即可在视图中正常工作的一种方法是简单地在地址中使用localhost。虚拟目录对于集中化脚本至关重要和用于多个Web应用程序的内容文件。在下面的示例中,我在IIS 7.5中创建了“共享”虚拟目录,希望对您有所帮助。

@if (false)
{
   <script src="http://localhost/Shared/jQuery/js/jquery-1.7.2-vsdoc.js" type="text/javascript"></script>
}

我用这样的东西:

   <script src="<%= ResolveUrl("~/Content/jquery-1.2.6.js") %>" type="text/javascript"></script>   

   <%--<script src="../../Content/jquery-1.2.6.js" type="text/javascript"></script>--%> 

然后,当您要使用智能感知时,您必须取消注释第二个引用。 这很烦人,但我遇到的唯一解决方法。

Visual Web Developer Team Blog上查看JScript IntelliSense FAQ 这些注释还引用了Srully的if(false)技巧。

我创建了一个HtmlHelper扩展(PathReference是ReSharper的JetBrains.Annotations属性,可以省略):

public static class HtmlHelperExtensions
{
    public static MvcHtmlString Script(this HtmlHelper html, [PathReference]string scriptFile)
    {
        var filePath = VirtualPathUtility.ToAbsolute(scriptFile);
        return new MvcHtmlString("<script type=\"text/javascript\" src=\"" + filePath + "\"></script>");
    }
}

然后,我在母版页中这样做

<%
    if (false)
    {
%>
    <script src="../../Scripts/jquery-ui-1.8.9.custom.min.js" type="text/javascript"></script&gt;
<%
    }
%>
<%:Html.Script("~/Scripts/jquery-ui-1.8.9.custom.min.js")%>

我现在同时具有智能感知和正确的运行时引用。

(感谢Sruly的if(false)技巧)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM