关于客户端调用后台事件__doPostBack函数的使用
1. 动态添加生成的控件:Asp.net开发网站,最喜欢用的就是使用服务器控件,在后台进行数据操作了,你无需再去管get还是post提交,也不用去理会form,只需在后台服务器控件的事件中就可以对数据库进行操作。
2. 客户端脚本中调用webservice中的方法进行数据库操作:但有些时候会有一些控件是动态添加生成,又需要通过这些控件对数据库进行操作。由于动态添加的控件无法调用后台服务器控件的事件,这个总会让人觉得很麻烦。以前碰到这种问题,第一个想到就就是js+ajax方式,在客户端脚本中对webservice进行调用。
3. 客户端_doPostBack函数:但是使用webservice需要创建额外的webservice文件,再从脚本进行调用,也确实挺麻烦的,好些时候也仅仅是使用这些控件进行一些简单的诸如删除数据等操作,使用webservice似乎也有些浪费。如果这些控件能直接使用后台事件,那就方便的多了。带着这个问题,偶然的一次,发现了可以使用客户端__doPostBack函数调用后台事件。
4. _doPostBack函数工作原理:这里介绍一个常用的函数_doPostBack,这个函数如果是ASP.Netrender出来的页面就是自动产生这个函数,比如有带autopostback属性的控件,且其属性为true的页面,带编辑列的datagrid页面。__doPostBack是通过__EVENTTARGET,__EVENTARGUMENT两个隐藏控件向服务端发送控制信息的。__EVENTTARGET为要调用控件的名称,如果要调用的控件是子控件,用''$'或':'分割父控件:子控件,__EVENTARGUMENT是调用事件时的参数。
5. 示例:使用以下示例通过点击页面中的客户端按钮btnClient调用后台事件。
示例代码:
<asp:Button ID="btnServer" name=” btnServer” runat="server" Text="Button" onclick="Button1_Click" style="display:none;"/> <input id="btnClient" type="button" value="button" onclick="__doPostBack('Button1','')"/> <asp:DropDownList ID="ddl" runat="server" AutoPostBack="True" style="display:none;"></asp:DropDownList>
后台代码:
1 protected void Button1_Click(object sender, EventArgs e) 2 { 3 Response.Write("aaa"); 4 }
控件说明:
1.btnServer是服务器控件,其Click事件供btnClient客户端控件回发调用,状态为隐藏;
2.btnClient 是客户端控件,使用onclick="__doPostBack('Button1','')"调用服务器控件的后台事件。
3.dll控件不可缺少,是__doPostBack()函数调用后台事件的枢纽,状态为隐藏;
6. 扩展:
Request["__EVENTTARGET"]:获取得到引发页面PostBack的控件ID
Request["__EVENTARGUMENT"]:获取参数。
其中eventTarget 和eventArgument,是两个就是用来存储在回送的时候获取是哪个控件触发了回送,并且带了什么参数。
总之,调用__doPostBack函数可以实现客户端控件调用服务器端控件的响应。而且可根据两个参数确定触发事件的控件的id等相关属性和传递的参数进行相应的数据库操作。
虽然对这个函数还没有完全理解其原理,但以后使用客户端控件调用服务器控件的后台事件是没问题了。