Относительные пути ASP.NET MVC без нарушения JavaScript IntelliSense? - PullRequest
1 голос
/ 16 марта 2009

Добавление сценария в представление обычно включает в себя что-то вроде этого:

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

К сожалению, это не работает, если приложение развернуто в виртуальном каталоге под IIS 6. Обсуждаемые здесь альтернативы включают использование Url.Content с "~" для динамического разрешения пути, но это полностью ломает JS IntelliSense.

Есть ли способ обойти это и заставить IntelliSense работать без потери возможности развертывания приложения в виртуальном каталоге?

Ответы [ 5 ]

3 голосов
/ 16 марта 2009

Для кода развертывания вы можете использовать google ajax apis для загрузки JQuery. Рекомендуется, потому что это помогает времени загрузки страницы из-за использования Google CDN.

чтобы получить intellisense добавьте это на свою страницу

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

это не будет выпущено, потому что оно находится в пределах if (false), но intellisense распознает его

1 голос
/ 05 июня 2012

В VS2010 один из способов обратиться к файлу "* vsdoc.js в виртуальной папке / каталоге и заставить Intellisense работать должным образом в представлении без использования CDN - это просто использовать localhost в адресе. Виртуальный каталог необходим при централизации файлов сценариев и содержимого для нескольких веб-приложений. В приведенном ниже примере я создал виртуальный каталог «Общий доступ» в IIS 7.5. Надеюсь, это кому-нибудь поможет.

@if (false)
{
   <script src="http://localhost/Shared/jQuery/js/jquery-1.7.2-vsdoc.js" type="text/javascript"></script>
}
1 голос
/ 27 марта 2009

Ознакомьтесь с JScript IntelliSense FAQ в Блоге команды разработчиков Visual Web . В комментариях также упоминается if(false) трюк Срулли.

1 голос
/ 16 марта 2009

Я использую что-то вроде этого:

   <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>--%> 

Затем вам нужно раскомментировать вторую ссылку, если вы хотите использовать intellisense. Это раздражает, но единственный обходной путь, с которым я столкнулся.

0 голосов
/ 16 февраля 2011

Я создал расширение HtmlHelper (PathReference является атрибутом JetBrains.Annotations для ReSharper и может быть опущено):

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")%>

Теперь у меня есть как intellisense, так и правильные ссылки времени выполнения.

(Спасибо Срули за трюк if(false))

...