Как включить jQuery в страницу ASP.net?

У меня есть ASP.net UserControl, который требует, чтобы содержащая страница включала ссылку на jquery.

В прежние дни я бы просто включил ссылку на jQuery на содержащую страницу:

<HEAD>
   <SCRIPT type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></SCRIPT>
</HEAD>

Но моя зависимость UserControl от jQuery - это внутренняя деталь реализации, которая не должна протекать снаружи. Как мой userControl может указать, что jQuery будет включен в итоговую страницу?


Исследуя это, я нахожу много запутанных решений, вызывая разные функции в разное время. я стесняюсь упоминать любой из них, потому что люди могут подумать, что любой из них действителен. Я надеюсь на правильный ответ, а не на ответ, который работает.

Различные решения включают вызов:

Моя путаница сосредоточена вокруг:

  • Когда я захочу использовать RegisterClientScriptInclude vs RegisterStartupScript?
  • когда я хочу называть его во время Page_Load vs Render vs PreRender против нажатия кнопки?
  • как мне передать RegisterXxxxScriptXxx путь к "Scripts/jquery-1.7.2.min.js"?

Краткая версия: как мне преобразовать

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
    Inherits="_Default" %><!DOCTYPE html>
<html>
<head runat="server">
    <script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>

для использования в UserControl:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MySuperCoolControl.ascx.cs" Inherits="Controls_MySuperCoolControl" %>

Ответ 1

Вы можете использовать jQuery, размещенную google, следующим образом:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>

Ответ 2

Вы можете использовать ScriptManagerProxy в UserControl и ScriptManager на родительской или главной странице.

См. Как использовать ScriptManagerProxy В пользовательском элементе управления ASP.NET

Это позаботится о том, чтобы "Давать RegisterXxxxScriptXxx путь к" Scripts/jquery-1.7.2.min.js "и устранять необходимость беспокоиться об этом во время событий Page_Load/Page_PreRender.

Что касается "Когда я хочу использовать RegisterClientScriptInclude vs RegisterStartupScript?"

RegisterClientScriptInclude регистрирует внешний JS файл, который будет включен в страницу. RegisterStartupScript включает в себя блок встроенного исполняемого файла script на странице, который не находится во внешнем файле.

Ответ 3

[это применимо только в том случае, если ваш пользовательский элемент управления должен использоваться внутри компании. Если это для распространения, то это не будет очень полезно]

Взгляните на эту ссылку:

http://www.codeproject.com/Articles/196727/Managing-Your-JavaScript-Library-in-ASP-NET

В статье предлагается создать методы для создания ссылок на библиотеки javascript, такие как jQuery, чтобы, если вы хотите использовать их на странице, вы просто вызываете JavascriptLoader.IncludeJQuery() [или все, что вы назвали вашим методом].

Теперь я сделал шаг вперед, создав эти методы в сборке, которые я разместил в GAC, чтобы он был доступен для всех моих веб-приложений .net. Теперь, когда я хочу использовать jQuery, этот метод уже доступен. Лучше всего, что если я вызову метод в пользовательском элементе управления и снова вызову его в другом пользовательском элементе управления, и снова на странице, он все равно только регистрирует библиотеку один раз. Если я решила перейти на новую версию jQuery, я просто изменил свою dll, и она изменилась везде.

Ответ 4

Если ваш элемент управления ссылается на отдельный проект, вы можете встроить javascript в другую сборку. Смотрите этот старый, но хороший пример Скотта Митчелла:

http://www.4guysfromrolla.com/articles/080906-1.aspx