WEB开发网
开发学院网页设计JavaScript 编写组件,使用JavaScript更新UpdatePanel 阅读

编写组件,使用JavaScript更新UpdatePanel

 2010-09-14 13:31:00 来源:WEB开发网   
核心提示: 首先会注册一些基础脚本,我们会使用相同的Type和Key参数,编写组件,使用JavaScript更新UpdatePanel(6),这样保证了这段代码只会被注册一次,在注册每个代理方法的脚本时,我们需要强制更新所有指定的UpdatePanel,代码如下,就会使用该脚本的clientButto

首先会注册一些基础脚本,我们会使用相同的Type和Key参数,这样保证了这段代码只会被注册一次。在注册每个代理方法的脚本时,就会使用该脚本的clientButtonId作为key,保证了每段脚本都会被注册成功。顺便一提,我们在这里直接使用了Page的ClientScriptManager来注册脚本,保证了在异步更新UpdatePanel时,不会将脚本发送到客户端去。

可能有朋友会出现疑惑,为什么我们需要在页面的PreRenderComplete事件中注册脚本呢?在页面的Load事件中一并注册了不可以吗?答案是,因为ScriptManager也是在这时候注册ASP.NET AJAX的基础脚本,我们现在这么做是为了保证了我们注册的脚本出现在ASP.NET AJAX的脚本之后。

哦,原来如此……等一下,是否发觉我们现在的脚本与ASP.NET AJAX的基础脚本无关?没错,事实上我们这里的确可以方法页面的Load事件中注册,我现在这么做似乎只是一个习惯——或者说是为ASP.NET AJAX编写组件的一个模式——响应页面的PreRenderComplete事件,用于注册所需的脚本。

大部分的工作已经完成了,我们只需要再响应那个LinkButton的Click事件即可。我们需要强制更新所有指定的UpdatePanel。代码如下,非常简单,就不多作解释了:

触发更新

private void OnTrigger(object sender, EventArgs e)
{
  if (this.Enabled)
  {
    foreach (UpdatePanel panel in this.UpdatePanels)
    {
      System.Web.UI.UpdatePanel updatePanel =
        this.FindUpdatePanel(panel.UpdatePanelID);
      if (updatePanel != null)
      {
        updatePanel.Update();
      }
    }
  }
}
private System.Web.UI.UpdatePanel FindUpdatePanel(string id)
{
  System.Web.UI.UpdatePanel result = null;
  if (id != null)
  {
    result = this.NamingContainer.FindControl(id)
      as System.Web.UI.UpdatePanel;
  }
  if (result == null)
  {
    ResolveUpdatePanelEventArgs e = new ResolveUpdatePanelEventArgs(id);
    this.OnResolveUpdatePanel(e);
    result = e.UpdatePanel;
  }
  return result;
}
private void OnResolveUpdatePanel(ResolveUpdatePanelEventArgs e)
{
  if (this.ResolveUpdatePanel != null)
  {
    this.ResolveUpdatePanel(this, e);
  }
}

上一页  1 2 3 4 5 6 7  下一页

Tags:编写 组件 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接