关于客户端调用后台事件__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>
后台代码:
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("aaa");
}
控件说明:
1.btnServer是服务器控件,其Click事件供btnClient客户端控件回发调用,状态为隐藏;
2.btnClient 是客户端控件,使用onclick="__doPostBack('Button1','')"调用服务器控件的后台事件。
3.dll控件不可缺少,是__doPostBack()函数调用后台事件的枢纽,状态为隐藏;
6. 扩展:
Request["__EVENTTARGET"]:获取得到引发页面PostBack的控件ID
Request["__EVENTARGUMENT"]:获取参数。
其中eventTarget 和eventArgument,是两个就是用来存储在回送的时候获取是哪个控件触发了回送,并且带了什么参数。
总之,调用__doPostBack函数可以实现客户端控件调用服务器端控件的响应。而且可根据两个参数确定触发事件的控件的id等相关属性和传递的参数进行相应的数据库操作。
虽然对这个函数还没有完全理解其原理,但以后使用客户端控件调用服务器控件的后台事件是没问题了。
关于客户端调用后台事件__doPostBack函数的使用的更多相关文章
- .NET 前台调用后台事件和方法实现小结
转自:https://www.cnblogs.com/kinger906/p/3431842.html 除了下文讲的方式外,还有一种方式:html里面使用ajax写好提交方式和提交参数,然后以写一行带 ...
- 深入学习JS: __doPostBack函数
在.NET中,所有的服务器控件提交到服务器的时候,都会调用__doPostBack这个函数,所以灵活运用这个函数对于我们的帮助还是很大的. 比如,在我们写程序的时候经常会需要动态的生成一些控件,最简单 ...
- js 调用后台,后台调用js
<html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat=" ...
- Ext.net控件调整后台事件、方法论
一.以ext.net的button为例调用后台事件: 前台代码: <ext:Button ID="Button1" runat="server" Text ...
- 使用__doPostBack函数来达到使用客户端的控件来调用服务器端的函数的--小结
类比LinkButton按钮 LinkButton前台生成代码: JS代码: //<![CDATA[ var theForm = document.forms['form1']; if (!th ...
- js调用.net后台事件,和后台调用前台等方法以及js调用服务器控件的方法
http://blog.csdn.net/deepwishly/article/details/6670942 ajaxPro.dll基础教程(前台调用后台方法,后台调用前台方法) 1. javaS ...
- js调用.net后台事件,和后台调用前台等方法总结(转帖)
js调用.net后台事件,和后台调用前台等方法总结 原文来自:http://hi.baidu.com/xiaowei0705/blog/item/4d56163f5e4bf616bba16725.ht ...
- 使用Ajax在javascript中调用后台C#函数
使用Ajax在javascript中调用后台C#函数 最近一段时间在紧跟一个网站的项目,数据库中用户表的UserName要求是唯一的,所以当用户选定一个用户名进行注册时要首先检查该用户名是否已被占用, ...
- 关于datagrid中控件利用js调用后台方法事件的问题
前台调用后台方法除了用button的click事件,还可以用js调用 一.前台页面如图 需求点击这个按钮触发后台事件,从而能够调用存储过程 <epoint:HyperLinkColumn He ...
随机推荐
- call 和 apply
call和apply作用一样,都是为了转移this,区别在于传入参数的方式不同. this指当前方法所在的对象,如果方法的外面没有对象,则默认是window.由于闭包虽在调用的方法中,但是在创建的时候 ...
- confusing c++ 重写 与 重定义 记录1
class parent { public: void f() { cout << "parent f()" << endl; } void f(int i ...
- webvtt字幕转srt字幕的python程序(附改名程序)
最近写了两个比较简单的python程序,原有都是由于看公开课感觉比较费劲,一个是下载的视频无用的名字太长,另一个就是下载的vtt字幕播放器不识别,写了一个vtt转换成str字幕格式的文件 vtt to ...
- 单件模式——Head First
一.定义 单件模式(Singleton Pattern)确保一个类只有一个实例,并提供一个全局访问点. 二.适用性 1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时. 2.当这个唯一实 ...
- linux 排查page的状态问题
最近遇到一个page的释放异常的问题,堆栈如下: [ 1000.691858] BUG: Bad page state in process server.o pfn:309d22 [ mapcoun ...
- centos7启动iptables时报Job for iptables.service failed because the control process exited with error cod
centos7启动iptables时报Job for iptables.service failed because the control process exited with error cod ...
- Linux tcpdump命令使用方法
tcpdump是Linux上常用的抓包命令,用于截取网络分组并输出分组内容,常用于网络问题分析和排查. tcpdump语法 tcpdump [-i 接口] [-nn] [-w 文件名] [-c 次数] ...
- Ajax与select标签的组合运用
---------------------------------------------------------------------------------------------------- ...
- hadoop /etc/Hadoop/slaves文件解析【转】
slaves文件里面记录的是集群里所有DataNode的主机名,到底它是怎么作用的呢?slaves文件只作用在NameNode上面,比如我在slaves里面配置了 host1 host2 host3 ...
- hmac md5
import hmac //内置 def simaplemd5(str): m2 = hashlib.md5() m2.update(str) res=m2.hexdigest() return re ...