У меня есть ASP.net UserControl
, который требует, чтобы содержащая страница включала ссылку на 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
vsRegisterStartupScript
? - когда я хочу называть его во время
Page_Load
vsRender
vsPreRender
против нажатия кнопки? - как мне передать
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" %>