当前位置: 首页 > news >正文

__dopostback的用法

在.NET中,所有的服务器控件提交到服务器的时候,都会调用__doPostBack这个函数,所以灵活运用这个函数对于我们的帮助还是很大的.

       比如,在我们写程序的时候经常会需要动态的生成一些控件,最简单的方法就是通过一个字符串,比如string strButton = <input type =”button” ID=”button1”>,然后输出到页面,但是如果我们需要这个控件来执行一些服务器的功能,就比较困难了.这里我们就可以用过借用 __doPostBack这个函数来完成.接下来我觉个例子来说明一下具体如何调用.

 

       既然要在服务器端运行那么,我们可以声明一个不可见的LinkButton控件,那通常,我们希望一个控件不可见,通常都是把visible属性设为 false.但是在这里我们把LinkButton的Text属性设置为空,来是这个LinkButton不可见(为什么要这么设置,而不是直接设置 visible属性,我会在下面说明),接下来我们可以在LinkButton里面写一些服务器端的代码.然后就是如何通过我们动态生成的客户端控件来调 用LinkButton里面的功能,我们可以通过一个JavaScript函数来实现

       function ExcuteOnServer()

       {

       //第一个参数是你希望提交到服务器的控件的ID号,第二个参数是事件参数

       __doPostBack('LinkButtonID','');

       }

       接下去我们只需要在动态生成的这个Button控件的onclick事件中写上οnclick=”JavaScript:ExcuteOnServer();",这样当我们点击这个动态生成的客户端控件的时候,他便会执行LinkButton中的代码.

 

       这样便实现了动态生成的客户端控件提交到服务器端的功能.

       最后要说一下的就是为什么希望LinkButton控件不可见的时候,不是通过visible属性来完成的.因为当我们把visible属性设置为 false的时候,浏览器在解析的时候,根本不会把这个控件放在页面上,也就是说这个控件是不存在的,所以我们在调用__doPostBack函数的时 候,便会找不到控件.

这里介绍一个常用的函数_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.查看源代码,发现里面多了下面行

深入学习__doPostBack函数 - 漫步 - 漫步 <script language="javascript">

深入学习__doPostBack函数 - 漫步 - 漫步 <!--

深入学习__doPostBack函数 - 漫步 - 漫步     function __doPostBack(eventTarget, eventArgument) {

深入学习__doPostBack函数 - 漫步 - 漫步         var theform;

深入学习__doPostBack函数 - 漫步 - 漫步         if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {

深入学习__doPostBack函数 - 漫步 - 漫步                theform = document.forms["Form1"];

深入学习__doPostBack函数 - 漫步 - 漫步            }

深入学习__doPostBack函数 - 漫步 - 漫步         else {

深入学习__doPostBack函数 - 漫步 - 漫步                theform = document.Form1;

深入学习__doPostBack函数 - 漫步 - 漫步            }

深入学习__doPostBack函数 - 漫步 - 漫步            theform.__EVENTTARGET.value = eventTarget.split("$").join(":");

深入学习__doPostBack函数 - 漫步 - 漫步            theform.__EVENTARGUMENT.value = eventArgument;

深入学习__doPostBack函数 - 漫步 - 漫步            theform.submit();

深入学习__doPostBack函数 - 漫步 - 漫步        }

深入学习__doPostBack函数 - 漫步 - 漫步 // -->

深入学习__doPostBack函数 - 漫步 - 漫步 </script>

深入学习__doPostBack函数 - 漫步 - 漫步 <input type="hidden" value="" />

深入学习__doPostBack函数 - 漫步 - 漫步 <input type="hidden" value="" />

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

深入学习__doPostBack函数 - 漫步 - 漫步             <script language="javascript">

  深入学习__doPostBack函数 - 漫步 - 漫步 <!--

深入学习__doPostBack函数 - 漫步 - 漫步     function __doPostBack_Ex(eventTarget, eventArgument)

    {

       var theform;

       if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) 深入学习__doPostBack函数 - 漫步 - 漫步 {

               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);

           }

 

 

       }

相关文章:

  • 保证应用程序只有一个实例运行
  • 活动目录系列之三:多域环境的实现(单站点)
  • linux添加开机自启动脚本示例详解
  • Web内容管理系统 Magnolia
  • CentOS6.4下Mysql数据库的安装与配置
  • 委托与事件的练习
  • 1-shell教程
  • 点击空白处键盘hide
  • 学习打卡-2018/07/19
  • 控件学习IOS开源项目(1)之RatingView星级评论控件学习
  • MapReduce剥洋葱
  • IDS与snort
  • upstream sent too big header while reading...
  • VMware混合云–IaaS三国演义?
  • 主从nis服务器配置手册
  • 【Leetcode】101. 对称二叉树
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • CentOS6 编译安装 redis-3.2.3
  •  D - 粉碎叛乱F - 其他起义
  • HTML中设置input等文本框为不可操作
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java|序列化异常StreamCorruptedException的解决方法
  • k个最大的数及变种小结
  • Quartz初级教程
  • Spring Cloud Feign的两种使用姿势
  • 计算机在识别图像时“看到”了什么?
  • 看域名解析域名安全对SEO的影响
  • 码农张的Bug人生 - 初来乍到
  • 排序算法之--选择排序
  • 使用SAX解析XML
  • 网络应用优化——时延与带宽
  • 微服务入门【系列视频课程】
  • 项目管理碎碎念系列之一:干系人管理
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #include<初见C语言之指针(5)>
  • #laravel 通过手动安装依赖PHPExcel#
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)共用体union的用法举例
  • (力扣)循环队列的实现与详解(C语言)
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十)c52学习之旅-定时器实验
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十三)Flask之特殊装饰器详解
  • (转)程序员技术练级攻略
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 依赖注入的基本用发
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?