我有一個ASP.net UserControl
需要包含頁面包含對jQuery的引用。如何在ASP.net頁面中包含jQuery?
在古時,我也只會列入包含頁面jQuery的一個參考:
<HEAD>
<SCRIPT type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></SCRIPT>
</HEAD>
但我的用戶的jQuery的依賴是一個內部實現細節,不應該被泄漏到外面。我的userControl如何規定jQuery包含在最終頁面中?
研究這個,我發現很多混淆的解決方案,在不同的時間調用不同的函數。我不願意提及其中任何,因爲人們可能會認爲它們中的任何一個都是有效的。我希望正確答案,而不是一個有效的答案。
不同的解決方案涉及調用:
- calling
this.Page.ClientScript.RegisterClientScriptInclude
duringRender
- calling
this.Page.ClientScript.RegisterStartupScript
duringRender
- calling
this.Page.ClientScript.RegisterStartupScript
duringPage_Load
- calling
this.Page.ClientScript.RegisterStartupScript
during a button click - calling
Page.Header.Controls.Add(new LiteralControl({ Text = "<script type=\"text/javascript\" src=\"...\"></script>";);
- simply including a
<SCRIPT>
element in youruserControl.ascx
file - calling
RegisterClientScriptBlock
duringOnPreRender
我的困惑是圍繞中心:
- 我什麼時候想用
RegisterClientScriptInclude
VSRegisterStartupScript
? - 什麼時候我要在
Page_Load
vsRender
vsPreRender
期間叫它vs按鈕點擊? - 我該如何給
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>
用在用戶控件:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MySuperCoolControl.ascx.cs" Inherits="Controls_MySuperCoolControl" %>
如果我做了一個自定義的控制,我將會把一個布爾變量的基礎上我控制自動註冊或不完整的jQuery庫。這樣我就讓最終用戶決定如何包含jQuery。我的自定義控件自動方式,或他的方式。 – Aristos
你很困惑,因爲你沒有考慮你提到的每個解決方案處理不同情況(或多或少)。例如,框架包含的東西不會發生在頁面加載中(同時啓動緩存圖像,這可能依賴於框架)。 –
我想說只有三個要考慮的是1,5和7.其他是基於實例或基於事件的情況,這不是應包含框架的地方。 –