65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET Postback 完全指南

2014年8月26日

CPOL

4分钟阅读

viewsIcon

207007

通过示例理解 ASP.NET Postback 的完整场景

引言

在旧的 HTML 中,更新网页内容的唯一方法是向客户端浏览器重新发送一个新网页。这就是 ASP 过去的做法,你需要进行一个叫做“PostBack”(回发)的操作,将更新后的页面发送给客户端。

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

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

旧 ASP 中用于在表单中使用 POST 方法的编程模型是将表单的值发布到第二个页面。第二个 ASP 页面将接收数据并对其进行处理,以便在服务器端进行任何验证或处理。

有了 ASP .Net,整个模型都改变了。每个 asp .net 页面都是一个独立的实体,能够处理自己的已发布数据。也就是说,表单的值被发布到同一个页面,并且同一个页面可以处理数据。这种模型称为 post back(回发)。

每个 Asp .net 页面加载时都会经历一个常规的创建和销毁周期,例如初始化、页面加载等,在开始时和关闭时进行卸载。Postback 是每个 Asp .Net Page (System.Web.UI.Page) 类的一个只读属性。当页面首次加载时,此属性为 false;当页面被提交并处理时,此属性为 true。这使得用户可以根据 PostBack 是 true 还是 false 来编写代码(使用 Page.IsPostBack() 函数)。

理解 PostBack

PostBack 被称为将 ASP.NET 页面提交到服务器进行处理的过程。如果需要根据某些来源检查页面的特定凭据(例如使用数据库验证用户名和密码),则会执行 PostBack。这是客户端机器无法完成的任务,因此这些详细信息必须“发布回”服务器。

Post back 是从客户端(浏览器)到服务器再返回到客户端的一个往返过程。这使得您的页面能够通过服务器上的 ASP 引擎,并更新任何动态内容。

Using the Code

Post back 是通过客户端的 JavaScript 实现的。为每个 .aspx 页面生成的 HTML 页面将在 form 标签的 action 属性中设置为同一个页面。这使得页面可以发布到自身。如果我们检查 HTML 文件中的条目,它看起来会像这样。

<form name=”_ctl1″ method=”post” action=”pagename.aspx?getparameter1=134″ language=”javascript” onsubmit=”if (!ValidatorOnSubmit()) return false;” id=”_ctl1″ >

此外,所有编写的验证代码(必填字段验证、正则表达式验证等)都将在客户端使用 Web 服务器 `wwwroot/aspnet_client` 文件夹中存在的 .js(JavaScript)文件进行处理。

通过这个新的 ASP .Net 模型,即使用户想将数据发布到另一个 .aspx 页面,Web 服务器也会检查 form 标签中的 `runat=’server’` 标签,并将 Web 表单发布到同一个 .aspx 页面。如下面的代码片段所示的简单声明足以创建这样的 Web 表单。

<form id=”form1″ runat=”server” > 
<!– place the controls inside –>
</form>

理解 AutoPostBack

AutoPostBack 是您分配给 Web 控件的一个属性,如果您希望在这些控件上发生任何事件时将页面回发。

Using the Code

<asp:DropDownList id="id" runat="server" AutoPostBack="true" OnSelectIndexChanged="..."/>

例如,这个 ddl 不需要 asp:button 就可以回发,当您更改 ddl 时,它会自动回发。

控件的默认值为 false。

ASP.NET 还添加了两个额外的隐藏输入字段,用于将信息传回服务器。这些信息包括引发事件的控件的 ID 以及任何其他需要的信息。这些字段最初是空的,如下所示,

`_doPostBack()` 函数负责使用关于事件的适当信息设置这些值并提交表单。`_doPostBack()` 函数如下所示。

<script language="text/javascript">
 
    function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();

    }
</script>

前提是页面上至少有一个控件使用自动回发,ASP.NET 会自动生成 `_doPostBack()` 函数。

理解 Page.IsPostBack

  • 获取一个值,该值指示页面是首次渲染还是响应回发而加载。
  • IsPostBack 属性可用于确定页面是否被提交到自身。当一个表单被提交回包含它的同一个页面时,这就称为回发。ASP.NET 提供了一个名为 IsPostBack 的属性,当页面因回发而加载时,该属性为 TRUE,否则为 FALSE。

使用代码

private void Page_Load()

{

    if (!IsPostBack)

    {

        //You can write here the code, which you want to execute in the first time when the page is loaded.

        FunctionToBindSomething();

    }

}

用法

  1. AutoPostBack 最常见的用途之一是用于 级联下拉列表
© . All rights reserved.