自定义服务器控件触发页面加载JS文件

Custom Server Control trigger Page Load JS file

Visual Studio 2013 年,C# 代码。

明确要求使用继承自 WebControl 基础的自定义服务器控件 class。

  [ToolboxData("<{0}:SampleTemplate runat=server></{0}:SampleTemplate>")]
        public class SampleTemplate : WebControl, INamingContainer
        {
            Private Button btnCustomer;
            Private Label lblCountry;
            private const string _JAVASCRIPT_URL = "/Scripts/ServerControlUtility/Customer.js";

已在 CreateChildControls 事件中初始化按钮和标签控件。

protected override void CreateChildControls()
        {
            Controls.Clear();
            lblCountry = new Label();
            lblCountry.ID = "Country";

            btnCustomer = new Button();
            btnCustomer.ID = "btnLookUpAddress";
            btnCustomer.Text = "Look Up Address";
            Controls.Add(btnCustomer);
        }

已使用自定义服务器控件中的 PageScriptManager 注册 JS 文件。与此控件相关的 CustomerJS 文件,负责客户端功能。

使用 Render/OnLoad 事件注册脚本。

protected override void Render(HtmlTextWriter writer)
        {
            var p = (Page)System.Web.HttpContext.Current.Handler;
            ScriptManager.RegisterClientScriptInclude(p, p.GetType(), "CustomerExtendedScript", _JAVASCRIPT_URL);

        }

问题是:Customer.JS 文件在主页面完全呈现之前被调用但是希望它在实际使用自定义控件的页面完全加载时被触发。就像 document.ready 中的函数 Jquery.

要点: 1.服务器控件应该是独立的实体所以不能使用Jquery 插件(或任何其他)
2. Customer.Js文件是纯Javascript文件
3. 主页面不用再添加Customer.JS文件引用 reason begin 引用已经存在于自定义服务器控件中

主要问题: 1. 如何调用 Customer.JS 文件,使其在主页完全加载后加载。 2. Customer.JS 文件只能在自定义服务器控件中引用,而不能再在其他地方引用。

使用

ClientScript.RegisterStartupScript

这将在 </body> 标记之后加载 javascript,因此页面应该已经加载。