Каков наилучший способ включить ссылки на скрипты в представлениях ASP.NET MVC? - PullRequest
2 голосов
/ 01 декабря 2010

Как вы знаете, ASP.NET MVC хранит разметку представления в каталоге Views, который иерархически несовместим с маршрутами URL, которые используются в веб-приложении ASP.NET MVC. С другой стороны, в веб-формах ASP.NET (и в ASP.NET MVC тоже) URL-адреса могут и обычно имеют вложенные «каталоги», или, скорее, разделители пути, и это в сочетании с тем фактом, что веб-приложения часто не размещенный в корневом пути URL, а не в подкаталоге, то есть "/ stuff / here / MyActualApp", необходимо использовать путь сценария относительно корня приложения, а не относительно корня URL. Между тем, однако, скрипт IntelliSense для Visual Studio требует, чтобы URL-адреса отображались относительно редактируемого файла.

Кроме того, я столкнулся с множеством проблем с использованием runat = "server" для виртуализации корневого пути для поддержки "~ /", например, тег head должен быть также runat = "server", и это вводит все виды других ограничений.

Наконец, еще одна вещь: если на минимизированный вариант сценария, такого как jQuery, ссылаются в дополнение к фрагменту, готовому к intellisense, Visual Studio будет отказываться от него. Таким образом, вам почти нужно использовать экранированный код, чтобы не дать VS блокироваться.

Так что я использовал этот синтаксис или его разновидности в Visual Studio 2010 начиная с VS 2005 для включения сценария в мою разметку представления ASP.NET, чтобы иметь дело с несоответствиями вложенных папок для файлов представления ASP.NET MVC (которые не совпадают с реальными URL-адресами), а также с необходимостью использовать vsdoc-версию jQuery вместо минимизированной версии, чтобы я работал 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.

Ответы [ 4 ]

6 голосов
/ 01 декабря 2010

Мы используем SquishIt .Он также объединяет и минимизирует файлы и поддерживает CSS (и даже dotLess ).

<head>
  <%= Bundle.Css()
    .Add("~/media/css/style.less")
    .Add("~/media/css/print.css")
    .Add("~/media/css/media.css")
    .Render("~/media/css/styles_#.css") %>
  <%= Bundle.JavaScript()
    .Add("~/media/js/jquery-1.4.3.js")
    .Add("~/media/js/jquery.equalHeights.js")
    .Add("~/media/js/jquery.cycle.lite.1.0.js")
    .Add("~/media/js/swfobject-2.2.js")
    .Add("~/media/js/site.js")
    .Render("~/media/js/js_#.js") %>
</head>

T4MVC также может предоставить ссылку на URL:

<script src="<%= Links.Scripts.Map_js %>" type="text/javascript"></script>
2 голосов
/ 28 февраля 2012

Как вы знаете, ASP.NET MVC хранит разметку представлений в каталоге Views, который иерархически несовместим с маршрутами URL, которые используются в веб-приложении ASP.NET MVC

Это неверно.Как вы думаете, каким образом каталог представления по умолчанию несовместим с маршрутизацией?

С другой стороны, в веб-формах ASP.NET (и в ASP.NET MVC тоже) URL-адресамогут и обычно имеют вложенные «каталоги», или, скорее, разделители пути, и это в сочетании с тем фактом, что веб-приложения часто размещаются не в корневом пути URL, а в подкаталоге, например, «/ stuff / here / MyActualApp»", необходимо использовать путь сценария относительно корня приложения, а не относительно корня URL

, необходимо использовать путь сценария относительно корня приложения, а не относительнок корню URL

Что означает корень или URL?По умолчанию MVC не использует вложенные каталоги (если вы не установили для RouteExistingFiles значение true) Что означает, что URL-адрес имеет вложенные каталоги?Маршрутизация MVC использует сегменты, а не разделители пути.

приложения часто размещаются не в корневом пути URL, а в подкаталоге. Более правильно, приложения размещаются в виртуальном диске, который не находится на корневом уровне.С MVC 3 и ниже вам нужно ссылаться на статические ресурсы (css, javaScript) с помощью помощника @ Url.Content.

С MVC 4 / Beta + Razor и выше вам больше не нужноиспользовать помощник @ Url.Content.

Кроме того, я столкнулся с множеством проблем при использовании runat = "server" для виртуализации корневого пути для поддержки "~ /"Например, тег head должен быть также runat = "server", и это вводит все виды других ограничений

Никогда не следует использовать runat = "server" с приложением MVC длявиртуализируйте корневой путь.

необходимость использовать разновидность vsdoc jQuery вместо минимизированной версии, чтобы я работал intellisense.Это снова неверно.Вы никогда не должны ссылаться на версии vdoc напрямую.Visual Studio / VWD обнаруживает наличие файла сценария .vdoc и включает интеллектуальное присутствие.

Ваш вспомогательный подход, вероятно, является наилучшим маршрутом.Вы можете изменить мой вспомогательный подход http://blogs.msdn.com/b/rickandy/archive/2011/05/21/using-cdns-to-improve-web-site-performance.aspx

Обычно люди закомментируют ссылки .min для разработки, а также переключают комментарии для производства на использование минимизированной версии.На самом деле мы работаем над подходом к переключению разработки / производства с использованием минификации и комплектации.см. RequestReduce http://weblogs.asp.net/scottgu/archive/2011/11/27/new-bundling-and-minification-support-asp-net-4-5-series.aspx

0 голосов
/ 11 апреля 2012

В ASP.NET MVC 4 Razor стал достаточно умным, чтобы поддерживать обнаружение «~ /». Надеемся, что инструментальные средства VS11 IntelliSense справятся с этим.

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

Новое в ASP.NET MVC4: изменения бритвы (Александр Белецкий)

Между тем инструментарий Visual Studio и исходный код jQuery (поскольку jQuery использовался для справки в вопросе) были сильно изменены, так как вопрос был задан изначально. Ответ RickAndMSFT не применялся в то время. В настоящее время его ответ правильный; однако, поскольку это движущаяся цель, похоже, что к концу этого года нужно будет просто обратиться к сценарию напрямую, а Razor и пересмотренный инструментарий VS позаботятся обо всем.

0 голосов
/ 01 декабря 2010

вы можете дать что-то подобное во время разработки, и чтобы оно показывало вам intellisens

<reference path="http://code.jquery.com/jquery-1.4.1.js"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...