Как вы знаете, 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.