ASP.NET Postback 完全指南






4.83/5 (11投票s)
通过示例理解 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(); } }
用法
- AutoPostBack 最常见的用途之一是用于 级联下拉列表。