什么是回传?

我发现的最好的解释是来自Wiki。

回发是一个HTTP POST到表单所在的页面。

尽pipe本文没有解释如何在ASP中使用第二个页面,但在ASP.NET中不再需要它,但不会提供太多细节或背景。 我正在寻找一个关于回传信息的怪胎。 这很像“简单的问题,我怎样才能打扫房子”可以通过这本900页的书来解决。 我不需要900页的价值,但细节请。 我发现一个很好的ASP.NET生命周期的小教程,但它严重掩盖回发(等)。

我正在寻找.NET之前的开发人员,他们并没有把这些东西当成是理所当然的。 书籍和超链接是您的答案的合理答案或补充。

到目前为止,我已经看到了正确的答案,几乎每个人都害怕我主观上认为是标记。

让我们从基础开始:

HTTP请求可以是任何HTTP动词 ,但主要的两个人使用的是GET和POST。 那么,这是程序员最经常使用的两个。 其他人都有一些目的,如果他们在服务器上实现。 当您向服务器发送信息时,可以通过使用URL(请求一个页面)或在请求的主体(例如POST,PUT,DELETE)中这样做。

现在你会说(我确定)GET请求中的URL经常包含数据,这是真的,但根据W3C,你不应该使用GET来改变状态,但我们经常做。 这是一种黑客,我们都同意是一个实际的使用,而不是黑客。 无论这是否是一个黑客或实际的实施细节我留给你。

所以,当你发送POST的主体(现在跳过其他的,你可以从这里找出来)与表单元素,你发回某些元素。 如何定义这些元素取决于您和您所在的环境。您可以在正文中使用JSON元素,或使用XML或表单字段发布到服务器。 一般来说,我们从HTML的主体中的FORM元素进行发布。

现在大家都说,“哦,回传是后续的一个页面请求。” 但是,这不是事实。 回发是当你通过POST发送数据 – >回到服务器。 我这样说是因为GET请求和POST请求之间的区别在于数据包含在正文中(以及使用的动词,但客户端通常知道如何处理)。 您可以在第一次访问该页面时回发到页面,实际上ASP.NET有用于在该库中执行该操作的工具。 你当然可以有一个桌面客户端POST数据到服务器(思考Twitter),而不会显示任何网页从服务器(好吧,所以微博可能不是最好的概念,在这里用一个例子,但我想说明你可以使用不显示网页的客户端,因此不需要请求)。

所以真正你应该在“回发”中读到的是“我将数据返回到服务器进行处理”。 假设您最初使用GET来检索页面,以向用户显示具有<input>字段的<form>元素,以便他们与之交互,并在最后发送数据。 但是,我希望你能看到它不一定是这个顺序。

所以这里有其他要考虑的事情:

如果你给用户一个<input> s和no <form> ,而是在javascript中连接一个button来连接所有这些<input>&value-n=并把它们作为一个GET ? 做同样的事情,但违反了只使用GET请求的概念。 (可能) 随后的讨论鼓励我强调,GET应该没有副作用(没有更新值)

例如,你如何能够向某人发送链接到谷歌search。 所以我们并不总是必须POST回服务器才能获取数据。

希望这可以帮助。 干杯

请参阅MSDN上的ASP.NET页面生命周期概述 ,以获得关于请求到达服务器时发生的情况的一般性介绍。

回邮是对不是第一个请求的页面的任何请求。 PostBack将总是响应用户操作(最常见的是由Button,AutoPostBack控件或Ajax触发)。

POSTBACK:ASP.NET隐藏网页/ HTTP的真实无状态本质的一部分。 这会导致复杂的代码(IsPostback,…),难以理解的页面生命周期,许多不同的事件,以及许多问题(ViewState大小,Web农场粘性,状态服务器,浏览器警告(不使用PRG模式) ,…)

请参阅ASP.NET MVC

回发是从客户端(浏览器)到服务器的往返,然后返回到客户端。

这使您可以通过服务器上的asp引擎和任何要更新的dynamic内容。

这里是一个很好的解释

ASP.Net使用ViewState的一个新概念(嗯,现在比较老的了,现在已经过时了)来维护你的asp.net控件的状态。 这是什么意思? 简而言之,如果您在文本框中input内容或从下拉列表中select下拉菜单,则当您单击button时,它将记住这些值。 旧的asp会迫使你编写代码来记住这些值。

这在用户遇到错误时很有用。 而不是程序员不得不记住重新填充每个Web控件,asp.net viewstate自动为你做这个。 这也是有用的,因为现在后面的代码可以通过智能感知在asp.net web窗体上访问这些控件的值。

至于发布到同一页面,是的,“提交”button将发布到页面后面的代码的事件处理程序。 如果需要的话(或者提供一个错误信息给你的页面,或者你可能需要做的任何事情),代码后面的事件处理程序可以redirect到不同的页面。

维基百科定义的回发是相当不错的,但我会添加以下内容: 回发是一个 后续的 HTTP POST到窗体所在的同一页面。

如果我有一个页面的表单,而不是让我的提交buttonredirect浏览器到另一个页面,将处理表单,而不是提交button刷新当前页面(并执行一些特定的步骤来validation/保存页面,据推测),那么提交button被认为已经回到当前页面。

回传可以是全部(刷新整个页面)或部分(在使用AJAX的情况下)。 部分页面回发将仅重新呈现页面的一部分(如单个下拉列表,表格等)。

在旧的HTML中,使网页更新的唯一方法是将新的网页重新发送到客户端浏览器。 这就是ASP用来做的事情,你必须做这个事情调用一个“回发”发送一个更新的页面到客户端。

在ASP .NET中,您不必重新发送整个网页。 您现在可以使用AJAX或其他ASP.NET控件,以便您不必重新发送整个网页。

如果你访问一些旧的网站,你会注意到,一旦你点击了一个东西,整个页面必须刷新,这是旧的ASP。 在大多数现代网站中,您会发现浏览器不必刷新整个页面,只会更新需要更新的部分内容。 例如,在Stackoverflow中,您将看到页面只更新内容,而不是整个网页。

简单地通过一点点的代码。 希望这对你有帮助。 当你第一次请求网页的url。 您可以在大多数浏览器中查看它的源代码。 下面是它的一个例子。

Post Back的实质是实际调用__doPostBack将提交的所有表单数据提交给服务器。 ( __EVENTTARGET包含控件的ID。)

 <html xmlns="http://www.w3.org/1999/xhtml"> <head><title> NHibernate Demo </title> <script language="javascript" type="text/javascript"> function dopost() { __doPostBack('LinkButton1', ''); } </script> </head> <body> <h1>NHibernate Demo</h1> <form name="ctl01" method="post" action="Default.aspx" id="ctl01"> <div> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTMxNzcwNTYyMWRkKHoXAC3dty39nROvcj1ZHqZ5FYY=" /> </div> <script type="text/javascript"> //<![CDATA[ var theForm = document.forms['ctl01']; if (!theForm) { theForm = document.ctl01; } function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } } //]]> </script> <div> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="B2D7F301" /> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKZx5vTCgKM54rGBgLM9PumD20dn9KQguomfpAOdTG0r9Psa7al" /> </div> <a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a> <input type="button" value="testPostBack" id="testpostback" onclick="dopost();" /> </form> </body> </html> 

IsPostBackAsp.Net页面的一个属性,它告诉页面是否on its initial load以及用户是否已经在网页上执行了一个button,导致页面返回自己。

更多… Asp.Net ispostback()

回传是一个请求期间ASP从视图状态恢复控件属性的值。