随笔 - 21, 文章 - 0, 评论 - 25, 阅读 - 53733
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

UpdatePanel工作原理

Posted on   肖敏  阅读(2000)  评论(0编辑  收藏  举报
  •  UpdatePanel如何实现部分呈现?

      我们知道,使用UpdatePanel向服务器发送一个异步请求,服务器处理该请求,初始化控件树的过程跟处理一般的请求是没有任何区别的。但是为什么最终向客户端呈现的只是UpdatePanel包含的控件内容,而不是整个控件树的内容呢?难道是ScriptManager偷偷的把其他的控件移除了吗?

      答案是否定的。

      ScriptManager控件首先是个普通的控件,在初始化时注册了一个RenderPageCallback函数,该函数在预呈现的时候执行。该函数中有一个关键的语句:

     

      form.SetRenderMethodDelegate(new RenderMethod(this.RenderFormCallback));

      该方法为form控件注册了一个RenderMethod方法RenderFormCallback,该方法就是呈现UpdatePanel里的内容的逻辑。为什么注册了RenderMethod方法就可以让其他的控件不被呈现,关键在于Control的RenderChildrenInternal方法。假如RenderMethod代理不为空,它就不会呈现自己的子控件!!!

     

internal void RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
{
    if ((this.RareFields != null) && (this.RareFields.RenderMethod != null)) //不会呈现自己的子控件
    {
        writer.BeginRender();
        this.RareFields.RenderMethod(writer, this);
        writer.EndRender();
    }
    else if (children != null)
    {
        foreach (Control control in children)
        {
            control.RenderControl(writer);
        }
    }
}

  •  UpdatePanel如何知道页面里没有ScriptManger控件?

     当我们使用UpdatePanel时,如果没有拖一个ScriptManager控件到页面里。将会抛一个异常。UpdatePanel是如何知道的?

     这是因为Page类里有一个Items属性,UpdatePanel在初始化的时候通过使用Page.Items[typeof(ScriptManager)] 获取ScriptManager的实例,如果为空则抛异常。我们可以推断出,ScriptManager在初始化的时候,会有这么一个语句Page.Items[typeof(ScriptManager)] = this。因此,ScriptManager必须放在UpdatePanel前面。同理,如果一个页面里放了两个ScriptManager也会抛出异常,原理也是一样的。

  •   UpdatePanel异步提交表单跟普通的提交有什么区别?

     多两个Key-Value,

     _ASYNCPOST true

     <ScriptMangerId> <UpdatePanelId>|<TriggerControlId>

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示