我有一个 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
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" %>