Использование скриптов на главной странице с помощью ASP.NET MVC
Я довольно новичок ASP.NET MVC, и у меня возникли небольшие проблемы со сценариями... в частности, я хочу использовать jQuery на большинстве страниц, поэтому имеет смысл поместить его на главную страницу. Однако, если я это сделаю (от моего ~/Views/Shared/Site.Master):
<script src="../../Scripts/jquery-1.2.6.js" type="text/javascript"></script>
тогда это буквально то, что спускается к клиенту - что, конечно, работает только в том случае, если наш текущий маршрут имеет правильное количество уровней. Начиная с ~/Scripts/... не работает. Начиная с /Scripts/... будет работать только если проект был в корень сайта (который я не хочу предполагать).
у меня есть один рабочий подход (я опубликую ниже) - но: я что-то упустил?
Я бы предпочел не привлекать скрипт-менеджера, так как это, похоже, побеждает простоту ASP.NET модель MVC... или я слишком волнуюсь?
вот как я могу заставить его работать, что также работает для нетривиальных виртуалов - но это кажется слишком сложным:
<script src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>" type="text/javascript"></script>
11 ответов:
у меня есть класс AppHelper с некоторыми методами для добавления ссылок на Скрипты:
public static string ReferenceScript(string scriptFile) { var filePath = VirtualPathUtility.ToAbsolute("~/Scripts/" + scriptFile); return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>"; }поэтому на главной странице вы можете использовать:
<%= AppHelper.ReferenceScript("jquery-1.2.6.js") %>
Я думаю, что самый простой способ-использовать следующее, и он работает в представлениях.
<script type="text/javascript" src="<%=ResolveUrl("~/Scripts/myscript.js") %>"> </script>
основываясь на других ответах, возможно, метод расширения на Html (который очень распространен для MVC), похожий на ответ Эдуардо:
<%=Html.Script("~/Scripts/jquery-1.2.6.js")%>С:
public static string Script(this HtmlHelper html, string path) { var filePath = VirtualPathUtility.ToAbsolute(path); return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>"; }
Почему бы просто не указать главную страницу на хостинг файлов JS от Google? Тогда даже когда дело доходит до развертывания (предполагая, что ваш сайт находится в Сети), вы можете злоупотреблять, возможно, предварительно кэшированными файлами jquery?
Я сделал некоторые из того, что упоминает OJ, я создал класс GoogleHelper с помощью этих методов
public static string ReferenceGoogleAPI() { var appSettings = new AppSettingsReader(); string apiKey = appSettings.GetValue("GoogleApiKey", typeof(string)).ToString(); return ReferenceGoogleAPI(apiKey); } public static string ReferenceGoogleAPI(string key) { return "<script type=\"text/javascript\" src=\"http://www.google.com/jsapi?key=" + key + "\"></script>"; } public static string ReferenceGoogleLibrary(string name, string version) { return "<script type=\"text/javascript\">google.load(\"" + name + "\", \"" + version + "\");</script>"; }теперь я добавляю дополнительные методы, чтобы получить некоторые данные ClientLocation ;)
на работе мы делаем что-то вроде этого из кода ASP позади:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Const jQuery As String = "jQuery" With Me.Page.ClientScript If Not .IsClientScriptIncludeRegistered(jQuery) Then .RegisterClientScriptInclude(jQuery, VirtualPathUtility.ToAbsolute("~/Includes/jQuery-1.2.6.js")) End If End With End SubЯ не знаю, можно ли это сделать с помощью ASP.NET MVC.
ResolveUrl является самым элегантным решением ИМО. Хотя это настоящий позор, URL-адреса для CSS разрешаются runat=server, а не скриптом.
вы должны взглянуть на использование утилиты, как хлюпать его. Он может агрегировать и запутывать все ваши css и js файлы для вас. Или вы можете использовать его для создания тегов скрипта, если вы просто держите его в debug больше с помощью ForceDebug ()
http://www.codethinked.com/squishit-the-friendly-aspnet-javascript-and-css-squisher
Я просто использую косую черту (/). Например:
<script src="/Script/jquery-1.4.1.js"></script>когда "jquery-1.4.1.файл " js " находится в директории скрипта root. И это прекрасно работает.
наши приложения развертываются с использованием виртуальных каталогов, и у нас были некоторые проблемы с другими ответами, упомянутыми здесь (не разрешая путь правильно). Один из способов, который работал хорошо, (не единственный способ, заметьте), было использовать это:
<script src="<%=Request.ApplicationPath%>/Web/AppName/JavaScript/jquery-1.4.1.js"></script>
вы можете попробовать Url.Метод расширения контента с синтаксисом Razor
<script src="@Url.Content("~/Scripts/jquery.min.js")" type="text/javascript"></script>
Comments