13

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

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

我了解 HTTP 请求和异步请求,让我对 Partial Postback 感到困扰的是它似乎两者兼而有之。

也许我只是遗漏了一些东西,但在我看来,部分请求两者都有,首先触发异步 POST 请求,但浏览器似乎意识到并且活动指示器开始旋转,这通常只发生在 HTTP 请求页面期间使成为。

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

4

3 回答 3

27

我知道这个问题已经回答了,但我不同意这个答案......

在我看来,“部分回发”一词在上述文章“如何在 ASP.NET 2.0 中编写自己的部分回发”中被滥用。在本文中,作者向您展示了如何对 HttpHandler 进行 AJAX 调用。这是一个与在 ASP.NET 中进行 PartialPostback 调用非常不同的过程。

我相信在(上面的答案)事后评论中回避了这种“差异”,该评论指出:

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

虽然这个最后的评论有点难以捉摸 - 说明了使用 ASP.NET UpdatePanel 的“部分回发”的定义......它没有解释什么是部分回发(这又是一个与一个普通的 AJAX 调用)。

详细说明...


使用 UpdatePanel 的 MICROSOFT ASP.NET AJAX:
在基本级别上,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 ”它的页面并实现部分更新……这样做,它在一次调用中多次交易和管理视图状态。 这就是为什么它被称为“部分回发”。随后,这也是他们最初将 UpdatePanel 描述为使您的页面成为“ ajaxy ”的一种方式的原因(因为它与使用 AJAX 不同)。


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

这些点说明...

不仅“部分回发”是什么......而且为什么“部分回发”和“ajax”调用之间存在差异。这就是为什么这是一个更好的答案。

于 2011-11-30T13:29:29.113 回答
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 值。

于 2009-08-06T12:54:24.237 回答
1

看一眼:

http://www.codeproject.com/KB/aspnet/PartialPostback.aspx

于 2010-01-30T01:25:56.550 回答