Вопрос по jquery, asp.net – Как включить jQuery на странице ASP.net?

12

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

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

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

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

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

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

звонокthis.Page.ClientScript.RegisterClientScriptInclude в течениеRender звонокthis.Page.ClientScript.RegisterStartupScript в течениеRender звонокthis.Page.ClientScript.RegisterStartupScript в течениеPage_Load звонокthis.Page.ClientScript.RegisterStartupScript во время нажатия кнопки звонокPage.Header.Controls.Add(new LiteralControl( { Text = "<script type=\"text/javascript\" src=\"...\"></script>";); просто включая<SCRIPT> элемент в вашемuserControl.ascx фай звонокRegisterClientScriptBlock в течениеOnPreRender

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

когда бы я хотел использоватьRegisterClientScriptInclude противRegisterStartupScript? когда бы я хотел позвонить во времяPage_Load противRender против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" %>
Кроме того, это может быть полезно для обзора: Developer.yahoo.com / производительность / rules.html Я не "script теги вheader являются ужасными анти-шаблонами "нацистами, но в определенном масштабе это имеет смысл. Jared Farrish
Вы сбиты с толку, потому что не учитываете, что каждое упомянутое вами решение работает в разных ситуациях (более или менее). Например, что-то вроде фреймворка include не будет происходить при загрузке страницы (в то время как инициализация кэширования изображений будет иметь место, что может зависеть от фреймворка). Jared Farrish
Я бы сказал, что нужно рассмотреть только три, 1, 5 и 7. Остальные ситуации представляют собой ситуации, основанные либо на экземплярах, либо на события Jared Farrish
Если я создал пользовательский элемент управления, я помещу логическую переменную, основанную на нем, мой элемент управления будет автоматически регистрироваться или не заполняться полной библиотекой jQuery. Таким образом, я оставил конечного пользователя, чтобы решить, как он будет включать jQuery. Мой пользовательский контроль автоматического способа, или его путь. Aristos
@ Joze Я просто заставил любую страницу, на которой размещен UserControl, включатьjQuery самих себя. Я уверен, что у WebForms есть очень хороший предназначенный способ справиться с этим; я просто не мог попытаться угадать, что это было. Ian Boyd

Ваш Ответ

4   ответа
3

<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 против RegisterStartupScript?"

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

1

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

Посмотрите на эту ссылку:

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

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

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

0

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

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

Похожие вопросы