什么是部分回发?

ihu*_*ble 13 asp.net partial-postback

我是几个不同的Web技术堆栈中经验丰富的Web开发人员.我目前在.Net工作,我对Partial Postback感到好奇.

我理解Partial Postback的功能是什么以及如何以编程方式使用它,但我不喜欢使用我不理解的技术,如何实现Partial Postback.

我理解HTTP请求和异步请求,让我对Partial Postback感到困惑的是它似乎都是.

也许我只是遗漏了一些东西,但在我看来,Partial Request同时执行这两项操作,首先触发异步POST请求但浏览器似乎知道并且活动指示器开始旋转,这通常仅在HTTP请求页面期间发生渲染.

那么,任何人都可以了解微软如何在HTTP请求级别实现部分回发?

Pri*_*ERO 27

我知道这个问题已经得到解答,但我不同意答案......

在我看来,"部分回发"一词在上面提到的文章"如何在ASP.NET 2.0中编写自己的部分回发"中被滥用.在本文中,作者向您展示了如何对HttpHandler进行AJAX调用.这与在ASP.NET中进行PartialPostback调用的过程完全不同.

我相信这种"差异"在(上述答案)的思考后的评论中被忽略了:

" UpdatePanel不仅刷新它包含的控件,还会在处理后使用从服务器获取的值更新ViewState值. "

虽然这个最终评论有点难以捉摸 - 使用ASP.NET UpdatePanel来说明"部分回发"的定义......但它没有解释部分回发是什么(再一次,这是一个非常不同的过程.正常的AJAX调用).

详细说明...


MICROSOFT ASP.NET AJAX使用UpdatePanel:
在基本级别,Microsoft AJAX通过部分页面回发支持异步请求.部分回发遍历与同步整页回发相同的页面生命周期,但只刷新页面上的特定区域或控件 - 从而实现部分页面呈现.MICROSOFT ASP.NET AJAX依赖于拦截器模式来生成和处理部分回发.在初始化时,MICROSOFT ASP.NET AJAX JavaScript库添加了一组客户端事件处理程序来拦截通常会启动整页回发的调用.处理程序函数拦截来自已注册控件的回发调用,生成部分回发,处理响应内容,然后异步更新页面内容. 由于MICROSOFT ASP.NET AJAX构建于现有的ASP.NET回发体系结构之上,因此它利用事件验证并在整个部分回发过程中维护视图状态.您的标准"正常"AJAX调用不会执行这些操作!

简而言之......

MICROSOFT ASP.NET AJAX使用'普通'AJAX来' ajax-ify '它的页面并实现部分更新......并且这样做,它在整个单个调用中交易和管理视图状态MULTIPLE次. 这就是为什么它被称为"部分回发".随后,这也是他们最初将UpdatePanel描述为使您的页面" ajaxy "的一种手段的原因(因为它与使用AJAX不同).


NORMAL AJAX调用:
在浏览器中使用JavaScript启动的异步请求会创建与服务器的新连接.是的......这可能包括对页面的有状态回发,但也包括对当前页面之外的资源的无状态请求. 但是,在异步回发的情况下,只有服务器上当前页面需要处理的信息才会传递到请求中(您可以控制它). 这意味着,不需要提交整个页面的内容,也不需要管理视图状态,并且可以绕过嵌入到页面生命周期中的(本机)开销.同时,异步回发仅调用与处理CURRENT REQUEST相关联的服务器事件.这就是普通AJAX比PARTIAL POSTBACKS快得多的原因!

这些要点说明......

不仅'部分回发'是什么......但为什么'部分回发'和'ajax'之间存在差异.这就是为什么这是一个更好的答案.


Kir*_*tan 5

如何在ASP.NET 2.0中编写自己的部分回发:

部分后置构造的核心是XMLHttpRequest,一个DOM API.它可以在Web浏览器脚本语言(如JavaScript)中使用,直接将HTTP请求发送到Web服务器,而无需重新加载整个页面并在脚本语言中再次处理来自服务器的响应.然后,可以使用XML格式的这些数据来操纵客户端的页面元素.

单击ASPX页面上的按钮后,将使用XMLHttpRequest API发出客户端HTTP请求.此请求由Web服务器上的HttpHandler处理.HttpHandler接收请求,处理它,并将响应发送回ASPX页面上的XMLHttp对象.XMLHttp对象反过来使用响应并呈现适当的UI更改,而浏览器不必对页面进行完全刷新.

UpdatePanel不仅刷新它包含的控件,还会在处理后使用从服务器获取的值更新ViewState值.