__dopostback的用法

简介: 转载:http://blog.csdn.net/fwj380891124/article/details/8819926 在.NET中,所有的服务器控件提交到服务器的时候,都会调用__doPostBack这个函数,所以灵活运用这个函数对于我们的帮助还是很大的.

转载:http://blog.csdn.net/fwj380891124/article/details/8819926

在.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事件中写上onclick=”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,写入onclick="__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);

           }

 

 

       }

目录
相关文章
|
Kubernetes 安全 Devops
【云效流水线 Flow 测评】驾驭云海:五大场景下的云效Flow实战部署评测
云效是一款企业级持续集成和持续交付工具,提供免费、高可用的服务,集成阿里云多种服务,支持蓝绿、分批、金丝雀等发布策略。其亮点包括快速定位问题、节省维护成本、丰富的企业级特性及与团队协作的契合。基础版和高级版分别针对小型企业和大规模团队,提供不同功能和服务。此外,云效对比Jenkins在集成阿里云服务和易用性上有优势。通过实战演示了云效在ECS和K8s上的快速部署流程,以及代码质量检测和AI智能排查功能,展示了其在DevOps流程中的高效和便捷,适合不同规模的企业使用。本文撰写用时5小时,请各位看官帮忙多多支持,如有建议也请一并给出,您的建议能帮助我下一篇更加出色。
219129 19
|
11月前
|
存储 监控 安全
网络设备日志记录
网络设备日志记录是追踪设备事件(如错误、警告、信息活动)的过程,帮助IT管理员进行故障排除和违规后分析。日志详细记录用户活动,涵盖登录、帐户创建及数据访问等。为优化日志记录,需启用日志功能、管理记录内容、区分常规与异常活动,并使用专用工具进行事件关联和分析。集中式日志记录解决方案可收集并统一管理来自多种设备和应用的日志,提供简化搜索、安全存储、主动监控和更好的事件可见性,增强网络安全。常用工具如EventLog Analyzer能灵活收集、存储和分析日志,确保高效管理。
662 5
51开发板同一程序实现数码管实现时钟显示、秒表计时。通过独立按键选择模式(时钟/秒表)、时间的重定义
51开发板同一程序实现数码管实现时钟显示、秒表计时。通过独立按键选择模式(时钟/秒表)、时间的重定义
370 3
|
关系型数据库 Serverless 定位技术
PostgreSQL如何使用GIS函数计算两个点连线的中间点?
PostgreSQL如何使用GIS函数计算两个点连线的中间点?
498 62
|
12月前
|
人工智能 小程序 JavaScript
【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?
本文介绍了如何从零开始开发一个AI运动小程序,重点讲解了通过分包技术解决程序包超过2M限制的问题。详细步骤包括在uni-app中创建分包、配置`manifest.json`和`pages.json`文件,并提供了分包前后代码大小对比,帮助开发者高效实现AI运动功能。
|
SQL 前端开发 Java
又是大佬开源的一款自动预约i茅台APP的系统
这是一篇关于自动预约i茅台APP系统的介绍。该项目是一个开源系统,支持每日自动预约茅台,并且可以使用Docker一键部署。系统特性包括注册账号、添加用户、自动预约、选择预约门店、模拟位置等。提供了GitHub和B站上的视频教程,以及IDEA和Docker的启动指南。用户可以通过链接访问项目代码和文档,了解详细信息。
|
缓存 负载均衡 Dubbo
Dubbo服务集群容错原理(重要)
该文章主要介绍了Dubbo服务集群容错的原理,包括集群容错技术的概念、Dubbo中使用的集群容错技术种类及其原理。
|
监控 关系型数据库 分布式数据库
PolarDB产品使用问题之如何配置端口
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
Ubuntu Python
python3安装clickhouse_sqlalchemy(greenlet) 失败
如果上述方法仍然无法解决问题,建议查阅相关错误信息和官方文档,以获取更详细的帮助。确保你的Python环境和依赖库都在最新版本,有时问题可能会因为版本不兼容而导致安装失败。
504 0