探索Asp.net的Postback机制

转载 2010年05月25日 09:23:00

/* from: http://www.techmango.com/blog/article/DotNet/Explore_Asp_net_postback_mechanism.htm */

 

__doPostBack作为在asp.net中一个很核心很重要的部分,我们有必要深入了解一下.

其实,__doPostBack是一个很简单的脚本函数.代码如下:

 

//__doPostBack<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />function __doPostBack(eventTarget, eventArgument) {if (!theForm.onsubmit || (theForm.onsubmit() != false)) {theForm.__EVENTTARGET.value = eventTarget;theForm.__EVENTARGUMENT.value = eventArgument;theForm.submit();}}

原来是在submit上做文章啊.microsoft呈现给我们的就是这种精巧的思维!

我看到,asp.net现在页面上添加了两个hidden input,这两个input分别用来存放触发postback的control的ID和参数.这就是我们大部分人认识到的:

__doPostBack(obj1,obj2)的第一个参数是控件ID,第二个参数是postback的参数.然后就可以在后台用Request.Form["__EVENTTARGET"]和 Request.Form["__EVENTARGUMENT"]取得控件ID和参数.

不过,另外要注意的就是asp.net的webcontrols中,Button或其它***Button,如ImageButton就特殊了,它们不是利用 __doPostBack来实现postback的.为什么这样,可能因为Button在html中本来就是有触发submit事件的功能吧.asp.net不过是要令原来html中一些不能触发submit的东西submit,才弄出了__doPostBack来实现吧.

所以如果是Button的postback,在后台是不能用Request.Form["__EVENTTARGET"]和Request.Form["__EVENTARGUMENT"]取得控件ID和参数的.那么,怎么取呢?看代码:

 

//取Buttonforeach (string str in Request.Form){  Control c = Page.FindControl(str);  if (c is Button)  {    control = c;    break;  }}

上述写法可以在后台找到Button.在Button的提交过程中,Button会将Button本身的ID作为Request.Form的一个Key,它的Value是Button的 Text属性值,回传给服务器.所以可以在后台循环Form.Keys取到所提交的Button,以执行相应的函数.ImgButton也差不多,不同就在于,它不是用ImageButton的ID作为Request.Form的Key,它是用ImageButton的ID加上.x和.y作为Key,在 Request.Form添加两上键值对,这两个键值应该是对应ImageButton的图片大小的,了解了这个规律后,我们仍然可以通过一定的方式得到是否是由ImageButton引发的PostBack.

通过获取到提交过来的控件ID后, Asp.net就能找到对应注册了事件的控件,并触发事件了.

示例

再认识asp.net的postback机制:探索__doPostBack的来龙去脉

原文连接:http://www.cnblogs.com/KenBlove/archive/2008/11/06/1328238.html ------------------------------...
  • lqh4188
  • lqh4188
  • 2015-06-26 10:33:19
  • 620

.NET框架学习:浅谈ASP.NET的Postback

浅谈ASP.NET的Postback 说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编...
  • songjianyue12345
  • songjianyue12345
  • 2016-11-28 15:35:50
  • 920

ASP.NET Postback回调后参数无效

描述  ASP.net 添加了"event validation"的功能, ASP.NET会检查 POST方法中的所带的参数,如果认为不合法,就会抛出异常,信息如下: Invalid postba...
  • xuyue1987
  • xuyue1987
  • 2011-08-20 21:49:35
  • 2668

ASP.NET postback(回发)后如何保持网页的位置

 通常情况下,ASP.Net 页面 PostBack(回发)后,页面一般定位在整个网页的顶部!但我们在实际项目中经常需要,回发后能定位到自己刚刚点击提交按钮位置,那这种情况如何实现呢,下面介绍三种实现...
  • tongyiyi
  • tongyiyi
  • 2009-06-22 12:53:00
  • 1236

诡异的Invalid postback or callback argument(無效的回傳或回呼引數)

今天碰到一個奇怪的現象,當使用者在網頁上快速點擊按鈕或其他會導致 postback 的動作時(即每次 request 還沒來得急接收到 response 就又再點其它按鈕),會發生 Invalid p...
  • greatbag
  • greatbag
  • 2006-11-09 11:53:00
  • 2225

使用PostBackUrl传递数据

方法一        if (Page.PreviousPage != null)        {            TextBox txtName = (TextBox)Page.Previo...
  • aiq
  • aiq
  • 2007-09-06 10:47:00
  • 1411

如何在ASP.NET使用JavaScript阻止页面回传postbacks

在ASP.NET中,页面回传(postback)是很常见的一种形式,它用于客户端和服务端进行交互,从而执行新的页面生命周期,加载ViewState等,对于客户端的效果来说,就是你会看到页面被刷新了,但...
  • aa466564931
  • aa466564931
  • 2011-07-08 12:53:06
  • 2771

ASP.NET: TextBox控件如果设置为ReadOnly则PostBack之后可能丢失数据的问题

这是在项目中发现的一个小问题,TextBox控件应该是设计使然。有关的解决方法是,不要直接设置ReadOnly=true,而是通过Javascript的方式为其添加readonly的attribute...
  • chen_xizhang
  • chen_xizhang
  • 2010-02-03 15:00:00
  • 674

如何让ASPxButton不PostBack

http://community.devexpress.com/forums/p/65455/222233.aspx ASPxButton元件,当对OnClick挂了事件后,即使AutoPostBa...
  • acrodelphi
  • acrodelphi
  • 2012-03-29 15:15:56
  • 1365

将模式对话框的返回值回送(PostBack)到服务端

作者:张老三的专栏    http://blog.csdn.net/billy_zh/ 在一些应用中,希望将模式对话框的值回送(PostBack)到服务端,也就是执行一个服务端操作,从而刷新页面。举个...
  • 21aspnet
  • 21aspnet
  • 2004-10-26 19:40:00
  • 2536
收藏助手
不良信息举报
您举报文章:探索Asp.net的Postback机制
举报原因:
原因补充:

(最多只允许输入30个字)