asp.net的postback机制:__doPostBack
来源:互联网 发布:怎么看丁丁大小知乎 编辑:程序博客网 时间:2024/05/15 00:57
__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();
}
}
因为最终呈现给浏览器的内容都是html内容,采用asp.net技术也不能例外.要实现webcontrol的postback机制.只能在原来的submit上做文章.ms呈现给我们的,就是这种精巧的思维! 我看到,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,又何必多此一举呢.(仅个人理解,未经验证!) 所以如果是Button的postback,在后台是不能用Request.Form["__EVENTTARGET"]和Request.Form["__EVENTARGUMENT"]取得控件ID和参数的.那么,怎么取呢?看代码:
取Button
foreach (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. 了解Postback机制对我们理解asp.net的事件触发过程有很大的帮助,好好利用__doPostBack更能灵活的使客户端和服务器端进行交互,获得更好的客户体验.
- asp.net的postback机制:__doPostBack
- 再认识asp.net的postback机制:探索__doPostBack的来龙去脉
- 由__doPostBack看asp.net中postback机制
- Asp.net的postback机制
- 探索Asp.net的Postback机制
- Asp.Net的PostBack
- 浅谈ASP.NET的Postback
- 浅谈ASP.NET的Postback
- 浅谈ASP.NET的Postback
- 浅谈ASP.NET的Postback
- 浅谈ASP.NET的Postback
- 浅谈ASP.NET的Postback
- 浅谈ASP.NET的Postback
- 浅谈ASP.NET的Postback
- Asp.Net的Page的__doPostBack 方法
- asp.net __dopostback()
- ASP.NET __doPostBack函数
- 深入理解ASP.NET的Postback
- 系统日志和IIS日志存放位置
- strongswan4.3.6 整体框架
- weblogic
- 下拉菜单截图
- TUXEDO 配置与参数
- asp.net的postback机制:__doPostBack
- SQL Server2005读取注册表
- PHP中stripslashes和addslashes的使用
- VMware Workstation 与Server 的区别
- Hibernate的对象的三种状态 瞬时态(Transient 持久态(Persistent 脱管态(Detached
- ORA-02069错误 处理办法
- symbian系统皮肤(theme)使用方法汇总
- gcc g++ 编译 wxwidgets的参数
- WSN在医疗中的应用