【问题标题】:asp.net IScriptControl $create orderasp.net IScriptControl $create 命令
【发布时间】:2012-07-02 05:09:35
【问题描述】:

我有两个脚本控件(代码非常简化):

class Form : IScriptControl
{
      Panel pnl;
      Button trigger;
      public Form()
      {
           pnl = new Panel();
           trigger = new Button();

           IPresenter p = new Popup();
           p.SetContent(this.pnl);           
           this.Controls.Add(trigger);
      }
}

class Popup : IScriptControl, IPresenter
{
      public void SetContent(Control content)
      {
           this.Controls.Add(content);
      }
}

现在在 HTML 输出中,我看到以下内容(同样非常简化):

<div id="ctrlForm">
    <div id="ctrlPopup">
        <div id="ctrlFormPnl"></div>
    </div>
    <div id="ctrlFormTrigger"></div>
</div>

还有脚本:

Sys.Application.add_init(function() {
    $create(Form, {"_presenter":"FormPresenter"}, null, null, $get("ctrlForm"));
});
Sys.Application.add_init(function() {
    $create(Popup, {"_isOpen":false}, null, null, $get("ctrlPopup"));
});

问题:我该怎么做,创建弹出窗口的脚本出现在表单脚本之前的页面上......换句话说,当 ctrlForm 控件的初始化程序执行时,我想获得对表单演示者的引用。

我希望我清楚地解释了我想要做什么。谢谢。

【问题讨论】:

    标签: javascript asp.net asp.net-ajax scriptmanager


    【解决方案1】:

    为了归档您的目标,您应该让子控件您的控件之前向 ScriptManager 注册。

    如果您在重写的 Render 方法中向 ScriptManager 注册您的控件,调用 base.Render(...) 像这样:

        protected override void Render(HtmlTextWriter writer)
        {
            // Let child controls to register with ScriptManager
            base.Render(writer);
    
            // Now, when all the nested controls have been registered with ScriptManager
            // We register our control.
            // This way $create statement for this control will be rendered
            // AFTER the child controls' $create 
            if (this.DesignMode == false)
            {
                ScriptManager sm = ScriptManager.GetCurrent(this.Page);
                if (sm != null)
                    sm.RegisterScriptDescriptors(this);
            }
    
       }
    

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多