Использование скриптов на главной странице с помощью 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/...
будет работать, только если проект был в корне сайта (что я не хочу предполагать).
У меня есть один рабочий подход (я опубликую ниже) - но: я что-то упустил?
Мне бы не пришлось привлекать script -manager, так как это, кажется, побеждает простоту модели ASP.NET MVC... или я слишком беспокоюсь?
Вот как я могу заставить его работать, что работает и для нетривиальных виртуальных объектов - но это кажется чрезмерно сложным:
<script src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>" type="text/javascript"></script>
Ответы
Ответ 1
У меня есть класс AppHelper с некоторыми методами добавления ссылок script:
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") %>
Ответ 2
Я думаю, что самый простой способ - использовать следующее, и он работает в представлениях.
<script type="text/javascript" src="<%=ResolveUrl("~/Scripts/myscript.js") %>">
</script>
Ответ 3
Основываясь на других ответах, возможно, метод расширения на 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>";
}
Ответ 4
Почему бы просто не указать главную страницу на Google js file hosting? Тогда даже когда дело доходит до развертывания (при условии, что ваш сайт связан с сетью) вы можете злоупотреблять, возможно, предварительно кэшированными файлами jquery?
Ответ 5
Я сделал некоторые из того, что упоминает 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;)
Ответ 6
На работе мы делаем что-то подобное из кода 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.
Ответ 7
ResolveUrl - самое изящное решение IMO. Хотя это настоящий позор, URL-адреса для CSS разрешены сервером runat =, а не script.
Ответ 8
Вы должны взглянуть на использование утилиты вроде squish it. Он может собирать и обфускации всех ваших файлов css и js для вас. Или вы можете использовать его для генерации тегов script, если вы просто держите его в отладке больше, используя ForceDebug()
http://www.codethinked.com/squishit-the-friendly-aspnet-javascript-and-css-squisher
Ответ 9
Я просто использую косую черту (/).
Например:
<script src="/Script/jquery-1.4.1.js"></script>
когда файл jquery-1.4.1.js находится в каталоге Script root.
И он отлично работает.
Ответ 10
Наши приложения развертываются с использованием виртуальных каталогов, и у нас были некоторые проблемы с другими ответами, упомянутыми здесь (не правильно разрешая путь). Один из способов, который работал хорошо (не единственный способ разума), состоял в том, чтобы использовать это:
<script src="<%=Request.ApplicationPath%>/Web/AppName/JavaScript/jquery-1.4.1.js"></script>
Ответ 11
Вы можете попробовать метод расширения Url.Content с синтаксисом Razor
<script src="@Url.Content("~/Scripts/jquery.min.js")" type="text/javascript"></script>