代码之家  ›  专栏  ›  技术社区  ›  P.Brian.Mackey

什么是回邮?

  •  79
  • P.Brian.Mackey  · 技术社区  · 15 年前

    我找到的回帖最好的解释是 Wiki.

    回发是对表单所在页的HTTP回发。

    虽然本文确实解释了在ASP中如何需要第二个页面,但在ASP.NET中不再需要第二个页面,但并没有给出太多细节或背景。我在找一本关于回邮的奇怪的资料。就像“我怎么能打扫房子”这个简单的问题一样 900 page book . 我不需要900页,但请详细说明。我为ASP.NET生命周期找到了一个很好的小教程,但是它很好地掩盖了回发(以及其他东西)。

    我在寻找那些以前在.NET上工作过的开发人员,他们并没有把这些事情视为理所当然。书籍和超链接是合理的答案或对你的答案的补充。

    10 回复  |  直到 10 年前
        1
  •  61
  •   Mycah Incognito    8 年前

    到目前为止,我已经看到了反复提到的正确答案,而且几乎每个人都对我主观上认为是标志的东西感到羞怯。

    让我们从基础开始:

    HTTP请求可以是 HTTP verbs ,但人们使用最多的两个是GET和POST。好吧,这是程序员最常使用的两种方法。其他的都有一些用途,如果它们是在服务器上实现的话。当您向服务器发送信息时,可以通过使用URL(请求页面)或在请求主体(例如POST、PUT、DELETE)中执行此操作。

    现在您将注意(我确信)GET请求中的URL通常包含数据,这是正确的,但是根据W3C,您不应该使用GET来更改状态,但是我们经常这样做。这是一种我们都同意是实际使用的黑客,而不是黑客。无论这是一个黑客还是一个实际的实现细节,我留给你。

    所以当你用表单元素发送文章的主体(暂时跳过其他的部分,你可以从这里理解)时,你发送的是某些元素。如何定义这些元素取决于您和您工作的环境。你 能够 使用JSON元素、XML或表单字段发送到服务器。通常我们在 身体 HTML的。

    现在每个人都说,“哦,回邮是对页面的后续请求。”但是,这不是真的。回发是指通过“回发”将数据发送回服务器。我之所以这么说,是因为GET请求和POST请求的区别在于数据是否包含在主体中(以及所使用的动词,但客户机通常知道如何处理)。你 能够 在第一次访问该页时回发到该页,事实上,ASP.NET在库中提供了执行此操作的工具。你当然可以让一个桌面客户端将数据发布到一个服务器(比如Twitter),而根本不显示服务器上的任何网页(好吧,Twitter可能不是这里示例使用的最佳概念,但我想说明的是,你可以使用一个不显示网页的客户端,所以不需要请求)。

    所以你应该在“回发”中读到“我正在把数据回发到服务器进行处理”。假设您最初使用GET检索页面,以向用户显示 <form> 具有 <input>

    所以,还有一些事情需要考虑:

    如果你给用户一个页面 <输入> s和否 <表格> 但是,用javascript连接了一个按钮来连接所有这些 <输入> s与 &value-n= 把它们当作礼物送去?做同样的事情,但是违反了只对请求使用GET的概念。 (可能) 接下来的讨论鼓励我强调GET应该没有副作用(没有更新值)

    举例来说,这就是为什么你可以给某人发送一个谷歌搜索的链接。所以我们不必总是发回服务器来获取数据。

    希望这有帮助。 干杯

        2
  •  29
  •   Ian Mercer    15 年前

    POSTBACK:ASP.NET设计的技术的一部分,用于在有状态的外观后面隐藏web/HTTP的真正无状态特性。这会导致复杂的代码(IsPostback,…)、难以理解的页面生命周期、许多不同的事件。。。以及许多问题(ViewState大小、web服务器场粘性、状态服务器、浏览器警告(不使用PRG模式),…)

    见 ASP.NET MVC 相反。

        3
  •  28
  •   Yaakov Ellis NevilleDNZ    15 年前

    见 ASP.NET Page Life Cycle Overview 在MSDN上有一个关于请求到达服务器时会发生什么的好的一般介绍。

    回发是指对一个页面的任何请求 不是 第一个请求。回发将始终响应用户操作(通常由按钮、自动回发控件或Ajax触发)。

        4
  •  13
  •   David Kethel    15 年前

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

    这使您可以浏览服务器上的asp引擎和任何要更新的动态内容。

    here is a nice explanation

        5
  •  10
  •   Scottie    15 年前

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

    这在用户遇到错误时非常有用。与程序员必须记住重新填充每个web控件不同,asp.net viewstate会自动为您执行此操作。它也很有用,因为现在后面的代码可以使用intellisense访问asp.net web表单上这些控件的值。

    至于发布到同一页,是的,一个“提交”按钮将发布到该页代码后面的事件处理程序。如果需要的话,由代码后面的事件处理程序重定向到另一个页面(或者向您的页面发送错误消息或其他需要执行的操作)。

        6
  •  8
  •   jwheron    15 年前

    维基百科对回发的定义很好,但我要补充如下: 回邮是 后来的 将HTTP POST发送到表单所在的同一页。

    如果我有一个带有表单的页面,而不是让我的提交按钮将浏览器重定向到另一个将处理表单的页面,而是让提交按钮刷新当前页面(并执行一些特定步骤来验证/保存该页面,假设如此),那么该提交按钮被称为 发回 到当前页。

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

        7
  •  4
  •   dsum    15 年前

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

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

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

        8
  •  3
  •   Joe.wang    12 年前

    简单地说,这是一个小代码。希望对你有帮助。 当您第一次请求页面url时。您可以在大多数浏览器中查看它的源代码。下面是它的一个样本。

    回邮的实质是 __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>
    
        9
  •  2
  •   Waldemar Gałęzinowski    9 年前

    回发是一个请求,在此期间,ASP从视图状态还原控件属性的值。

        10
  •  1
  •   500865    12 年前

    IsPostBack 是 Asp.Net 用于指示页是否为 on its initial load 如果一个用户在你的网页上执行了一个按钮,而这个按钮导致了网页发回自己。

    更多关于。。。 Asp.Net ispostback()

    推荐文章