代码之家  ›  专栏  ›  技术社区  ›  Mr Shoubs

我是否完全误解了ASP.Net AJAX(更新面板)?

  •  5
  • Mr Shoubs  · 技术社区  · 15 年前

    我可能误解了AJAX的工作原理-有人能解释一下下面的简化场景吗:

    我有一个asp.net web应用程序。在页面上,更新面板(不更改属性)和脚本管理器中有一个用户控件。

    在用户控件和窗体上都有一个标签,它们的文本都设置为 DateTime.Now.ToString 在加载事件中。还有一个按钮,它会在用户控件中引起回发。

    当我单击按钮时,正如我所期望的那样,用户控件内的标签会更新,而页面上的一个标签现在会更新。到现在为止,一直都还不错。

    然而。。。页面上的页面加载事件 使用isPostBack=True进行处理(这是我没有预料到的),看起来load事件中发生的任何事情都不会被推回到客户端(因为标签没有更新)。

    我不希望在AJAX面板更新时引发和处理页面加载事件(在包含用户控件的页面中),这是正确的吗?还是我做错了什么?我记得读过一些关于Page.IsCallback的文章,但那是错误的,所以这可能与此无关。

    4 回复  |  直到 13 年前
        1
  •  4
  •   Stephen Swensen    15 年前

    好吧,这个问题不是关于AJAX本身,而是关于微软基于AJAX的UpdatePanel,它是一个复杂的野兽。UpdatePanel工作方式的简单解释是,所有内容的工作方式都与正常的完整页面“post back”相同(ViewState发布到服务器,服务器端DOM被重新创建,所有页面事件生命周期事件都会执行),但在最后,呈现给客户端的响应只包括刷新启动AJAX请求的UpdatePanel内容所需的HTML子集。还有一些额外的微妙和复杂的游戏,但这是基本的想法。

        2
  •  2
  •   kevev22    15 年前

    所有页面生命周期事件即使在部分回发时也会执行。通过执行以下操作,可以区分完全回发和部分回发:

       if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
       {
    
       }
    
        3
  •  1
  •   Jim L    15 年前

    如果没有看到你正在做的事情的样本,我想不可能说你在做什么 错误的 .

    但是,是的,更新面板仍然调用服务器端的大部分页面生命周期。 如果您要寻找的是避免页面生命周期,那么页面方法可能更符合您的口味。不过,它们确实需要使用javascript。

    http://forums.asp.net/p/1070297/1571597.aspx

        4
  •  0
  •   Geoff Appleford    15 年前

    在回发期间,将再次执行所有页生命周期事件,并重新创建页并重新发送给客户端。

    update panel本质上是做一个完整的回发,但是只有更新面板中的控件在客户端上被刷新。因此,更新面板之外的任何控件都不会更新,即使您可能更改了它们在服务器上的值。

    你可以使用 Page.IsPostBack 属性检查是否进行页的初始加载或回发。只在第一次加载页面时执行以下操作:

    if (!Page.IsPostBack)
    {
        //doSomething
    }
    
    推荐文章