由__doPostBack看asp.net中postback机制
来源:互联网 发布:南风知我意七微百度云 编辑:程序博客网 时间:2024/05/18 03:17
__doPostBack方法解析
今天工作时遇到一个需要根据Gridview具体内容来判断是否弹出窗口,而Gridview中包含分页、排序等,它们并不能直接从查询字符串、或表单简单的分析出。这是因为存在__doPostBack方法,以及和其紧密关联的__ EVENTTARGET和__ EVENTARGUMENT。
使用在asp.net开发网页时,页面Html代码会包含类型下面代码的__doPostBack方法:
<script type="text/javascript">
<!--
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
// -->
</script>
只有两个Web Server Control 会自己触发页面的PostBack,其它的所有控件都是通过__doPostBack函数触发页面的PostBack,页面解析时回将该类生成一个__doPostBack(eventTarget, eventArgument)方法。eventTarget是引起回送的控件的ID,eventArgument是回调参数(与控件相关的附加数据)。这两个参数分别由隐藏的两个表单域__ EVENTTARGET和__ EVENTARGUMENT保存。使用这两个隐藏的表单可以查找引起页面回送的控件ID和回送时的参数。
当你触发__doPostBack事件时,遍历this.Request.Form.AllKeys,你查看到这两个隐藏的表单。
由于最终呈现给浏览器的内容都是html内容,采用asp.net技术也不能例外.要实现webcontrol的postback机制.只能在原来的submit上做文章。
我看到,asp.net现在页面上添加了两个hidden input,这两个input分别用来存放触发postback的control的ID和参数.这就是我们大部分人认识到的:
__doPostBack(obj1,obj2)的第一个参数是控件ID,第二个参数是postback的参数.然后就可以在后台用Request.Form["__EVENTTARGET"]和Request.Form["__EVENTARGUMENT"]取得控件ID和参数.
很简单就实现了看似很神奇,以为内部有什么高深的处理的过程!如此轻巧的实现了asp.net的postback机制,佩服佩服!只要我们看懂了上边的代码,对__doPostBack的使用就应该不是什么难事了.可以说__doPostBack就是这么简单的一回事.-_-||
不过,另外要注意的就是asp.net的webcontrols中,Button和ImgButton是异类,它们不是利用__doPostBack来实现postback的.为什么这样,可能因为Button在html中本来就是有触发submit事件的功能吧.asp.net不过是要令原来html中一些不能触发submit的东西submit,才弄出了__doPostBack来实现.对于原来就能submit的Button,又何必多此一举呢.
- 由__doPostBack看asp.net中postback机制
- asp.net的postback机制:__doPostBack
- 再认识asp.net的postback机制:探索__doPostBack的来龙去脉
- Asp.net的postback机制
- 探索Asp.net的Postback机制
- asp.net __dopostback()
- ASP.NET __doPostBack函数
- Asp.Net的PostBack
- ASP.Net 1.x 中 __doPostBack实现的问题
- ASP.Net 1.x 中 __doPostBack实现的问题
- ASP.net中PostBack后如何保持垂直位置
- ASP.net中PostBack后如何保持垂直位置
- ASP.NET中URL重写及PostBack处理
- [ASP.NET]从ASP.NET Postback机制,到POST/GET方法
- 浅谈ASP.NET的Postback
- 浅谈ASP.NET的Postback
- ASP.NET WebForm 之 PostBack
- 浅谈ASP.NET的Postback
- Linux解压命令
- 《学习opencv》第四章课后习题4
- 数据采集的烦恼
- 魔兽哈希算法封装和测试
- WebCore Rendering I --- the basic
- 由__doPostBack看asp.net中postback机制
- 汇编基础学习
- 数据库集群概述
- 颜色代码(CSS样式中的)
- 在IT界取得成功应该知道的10件事
- 域和生命期2_头文件
- Flex :自定义Loading载入状态(含图标) 及解决Flex中GIF动画图片加载时显示动起来
- C++的不足之处讨论系列(二)
- python中数字转换成字符串