关于前台调用后台事件__doPostBack函数

作者:admin 日期:2006-04-11

字体大小: 小 中 大
这里需要提一下的是,asp.net编程提供了服务端控件和客户端控件的说法,其实还是脱离不了HTML的本质,客户端和服务端需要交互必须要提交,提交有两种方式get和post,get就是通过向服务端发送连接地址,服务端通过地址的参数来获得信息的,一般这些参数都是明文,能在浏览器地址栏看到。而post是通过表单的input等元素提交到服务端的页面的,这些数据一般是看不到的。asp.net的服务端控件其实就是对一般的HTML控件做了个包装,大体是通过隐藏控件提供控制的参数的。
这里介绍一个常用的函数_doPostBack,这个函数如果如果是ASP.Net render出来的页面就是自动产生这个函数,比如有带autopostback属性的控件,且其属性为true的页面,带编辑列的datagrid页面。
__doPostBack是通过__EVENTTARGET,__EVENTARGUMENT两个隐藏控件向服务端发送控制信息的,__EVENTTARGET为要调用控件的名称,如果要调用的控件是子控件,用''$'或':'分割父控件:子控件,__EVENTARGUMENT是调用事件时的参数
下面演示下如何调用后台事件:
1.新建工程
2.拖入一个服务端Button1,一个DropDownList1和一个客户端Button
3.设置DropDownList1的AutoPostBack属性为True,Button1的Visible为False
4.双击Button1,在事件里写下Response.Write("hello:" );
5.页面的HTML里找到客户端Button,写入οnclick="__doPostBack('Button1','')"
6.编译,运行,点击Button是不是出现了"Hello"
7.查看源代码,发现里面多了下面行

程序代码

<script language="javascript">
<!--
    function __doPostBack(eventTarget, eventArgument) {
        var theform;
        if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
            theform = document.forms["Form1"];
        }
        else {
            theform = document.Form1;
        }
        theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
        theform.__EVENTARGUMENT.value = eventArgument;
        theform.submit();
    }
// -->
</script>

以及两个隐藏控件

程序代码

<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" />

值得注意的是,_doPostPack的第一个参数是大小写不敏感的

细心的人会发现,在__doPostBack里,提交调用的是theform.submit(),这样就导致对Form的onsubmit事件校验失效了,幸好这个问题在asp.net 2.0已经修复了。这里提供一个替换的解决办法,在Form的最下面插入下面的代码,这段代码在保证不管是不是render出来的页面均有效

程序代码

<script language="javascript">
<!--
    function __doPostBack_Ex(eventTarget, eventArgument)
    {
        var theform;
        if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
            theform = document.forms[0];
        }
        else {
            theform = document.forms[0];
        }

if(!theform.__EVENTTARGET)
        {            
            theform.appendChild(document.createElement("<input type='hidden' name='__EVENTTARGET'>"));
        }
        
        if(!theform.__EVENTARGUMENT)
        {            
            theform.appendChild(document.createElement("<input type='hidden' name='__EVENTARGUMENT'>"));                        
        }
        
        theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
        theform.__EVENTARGUMENT.value = eventArgument;
        if ((typeof(theform.onsubmit) == "function"))
        {
            if(theform.onsubmit()!=false)
            {
                theform.submit();    
            }
        }
        else
        {            
            theform.submit();    
        }
        
        function __doPostBack(eventTarget, eventArgument)
        {
            __doPostBack_Ex(eventTarget, eventArgument);
        }

}
// -->
            </script>

关于前台调用后台事件__doPostBack函数相关推荐

  1. php前台调用后台方法,JavaScript_JavaScript调用后台的三种方法实例,方法一:直接使用%=%调 - phpStudy...

    JavaScript调用后台的三种方法实例 方法一:直接使用调用 前台JS: var methodStr = ""; alert(methodStr); 后头方法: public ...

  2. ajax调用后台java方法,jquery ajax再次封装,前台调用后台java方法直接返回数据

    一,前台js部分代码 /** * bean参数格式:类全限定名.方法名  opt参数格式:键值对  handleResponse:会function类型参数包含一个参数data,为后台返回json数据 ...

  3. Aasp.net前台调用后台cs变量

    转:http://www.xueit.com/html/2009-09/21_4445_00.html 1.Asp.Net中几种相似的标记符号: < %=...%>< %#... % ...

  4. 微服务 前台调用后台的慢的原因_20年IT农民工分享SpringCloud微服务架构实战文档...

    前言 越来越多的企业使用 SpringCloud 实现微服务架构设计.我们可以看到这样一种现象:不管是全新开发,还是系统重构,大家似乎都在争先恐后地使用微服务.对于一个Java开发人员来说,学习微服务 ...

  5. JavaScript 调用后台事件和方法

    一,后台方法: protected string CsharpVoid(string strCC) { return strCC; } javascript 调用 <script   langu ...

  6. Asp.Net前台调用后台变量

    1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %&g ...

  7. .net 前台调用后台方法

    后台: public bool CheckName(string strInput)     {         string sql = "select * from UserTable ...

  8. 前台调用后台方法,无刷新更新数据

    语句的作用:页面注册方法的作用. AjaxPro.Utility.RegisterTypeForAjax(typeof(命名空间.类名)); Default.aspx.cs  public parti ...

  9. 关于datagrid中控件利用js调用后台方法事件的问题

    前台调用后台方法除了用button的click事件,还可以用js调用  一.前台页面如图 需求点击这个按钮触发后台事件,从而能够调用存储过程 <epoint:HyperLinkColumn He ...

最新文章

  1. 在安卓JNI/NDK中使用C++11
  2. Apache基金会接收阿里RocketMQ为孵化项目
  3. (转)javascript匿名函数
  4. 苹果cmsv10整合七牛云播放器插件
  5. java insert_java获取新insert数据自增id的实现方法
  6. 针式打印机设置连续打印不分页_打印机的应用与耗材介绍
  7. SpringMVC-高级参数绑定
  8. 转载:Windows Mobile 开发资源(精)
  9. React Native填坑之旅--class(番外篇)
  10. wamp 增加php 7.2,笔记 : WampServe加装PHP版本(7.2.3)为例
  11. dweep_极度好玩智力游戏
  12. Zint生成二维码环境搭建
  13. Embase,PubMed,Cochrane,WebOfScience,ScienceDirect检索方法
  14. 计算机用户删除文件找回,电脑上删除的文件如何找回 业内人士分享小技巧
  15. android 高仿 猿题库,猿题库(com.fenbi.android.gaozhong) - 9.17.2 - 应用 - 酷安
  16. gitlab代码查看行数
  17. HTML5中制作彩色圆环的代码,HTML5 五彩圆环Loading加载动画实现教程
  18. LINUX防火墙开放端口,查看状态,查看开放端口
  19. 1301 IP地址
  20. python识图找图_Python实现识别图片中的所有人脸并显示出来

热门文章

  1. hdu 2795(线段树)
  2. js笔记(10)之无缝滚动
  3. vue 项目抛出警告
  4. bzoj4551: [Tjoi2016Heoi2016]树(树链剖分)
  5. 前端用crypto.js进行加密和解密
  6. ThinkPHP5 相关知识重点笔记
  7. JS实现App扫码网页端登录
  8. Windows cmd命令反斜杠问题
  9. Flume1.7.0的安装与使用
  10. 项目经理怎么运用思维导图