__doPostBack 用法

转载 2011年01月21日 14:45:00

今天遇到了__doPostBack函数,在网上看到了很多关于__doPostBack使用的方法,但是感觉说法都有些出入,或者不清楚。因此也让我这个本来一向喜欢引用别人东西的人忍不住要在自己的博客里面留下自己的一点原创了。。

言归正传,首先要记住这个函数的前面是两个下划线. __doPostBack=  "_" + "_" + "doPostBack".

再介绍一下__doPostBack函数的作用。我们先来看一下_doPostBack函数的内容:

<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE4NDIzMDg2NDRkZMlHJoBQ9CYcWBtBK+zrfZzKoh/i" />
</div>

<script type="text/javascript">
<!--
var theForm = document.forms['form1'];
if (!theForm) {
    theForm 
= document.form1;
}

function __doPostBack(eventTarget, eventArgument) {
    
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value 
= eventTarget;
        theForm.__EVENTARGUMENT.value 
= eventArgument;
        theForm.submit();
    }

}

// -->
</script>
    
<div>

上面这段是直接从含有自动回传功能控件的.net Web页面的HTML源代码里面粘帖过来的。

其中eventTarget 和eventArgument,是两个就是用来存储在回送的时候获取是哪个控件触发了回送,并且带了什么参数。总之,调用__doPostBack函数可以实现客户端控件调用服务器端控件的响应。或者是在javascript里面调用.net的服务器控件事件。这一点可以充分用在子窗口调用父窗口中某个服务器控件的服务器端的事件。

 然后我们可以从LinkButton这个控件入手,分析一下 LinkButton的工作流程,就知道__doPostBack的使用方法了。因为微软的LinkButton就是使用__doPostBack函数来达到使用客户端的控件来调用服务器端的函数的。

我们可以运行一个包含有LinkButton的aspx页面,查看他的源代码,发现关于LinkButton这个控件的代码竟然是一个超链接:

aspx中LinkButton的代码:
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">button1</asp:LinkButton>
在html中的源码中被翻译成了:
<id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">button1</a>

上面的代码可以明显的看出,LinkButton只不过就是一个超链接,他的链接就是执行javascript语句通过调用__doPostBack函数来调用服务器端的后台代码的。因此,在有LinkButton的页面,会自动加上上面的__doPostBack函数。

但是在我们调用__doPostBack函数时,有些时候调用这个函数会出现"对象不存在"的脚本错误? 那是因为Html里面没有__doPostBack函数体,一般在拖放那些有自动回传功能的控件时,当把他的autoPostback属性设为True,在运行的时候系统会自动添加__doPostback函数体,当然最直接的办法就是添加一个LinkButton然后把其Text属性设为空,切记不要设Visible属性,因为如果Visible=false,在翻译成Html时,直接就忽略LinkButton的存在了。

相关文章推荐

错误与修复:ASP.NET无法检测IE10,导致_doPostBack等未定义JavaScript错误

在 跟随.NET 2.0和.NET 4一起发布的浏览器定义文件中有一个错误,也就是它们保存相当一部分浏览器版本的定义。但是浏览器的有些版本(比如IE10)不再在这个范围之内。因 此,ASP.NET把它...
  • vivlong
  • vivlong
  • 2013年04月24日 16:28
  • 1252

深入理解 __doPostBack

在我的随笔《Page,你是怎样处理回发事件的?》中曾提出一个疑问,如何得到引起页面PostBack的控件?通过阅读Page类的源码,误打误撞,无意中看到了__EVENTTARGET和__EVENTAR...
  • gameWYD
  • gameWYD
  • 2011年11月25日 09:28
  • 305

解决IE11执行doPostBack报错

  • 2016年09月12日 10:30
  • 23.38MB
  • 下载

解决IE10以上版本doPostBack未定义

  • 2013年12月02日 10:24
  • 23.38MB
  • 下载

深入理解asp.net中的 __doPostBack函数

很早以前,当我刚接触asp.net开发时,我曾有很多很多的疑问(大概是因为我以前一直做jsp开发,也接触过一段时间的asp,脑海中没有这种基于“控件编程”和“事件编程“模型的缘故吧。当然,如果对于一个...

doPostBack 实例

  • 2014年01月03日 15:03
  • 4KB
  • 下载

深入理解 __doPostBack

http://www.cnblogs.com/hjf1223/archive/2006/07/05/443761.html在我的随笔《Page,你是怎样处理回发事件的?》中曾提出一个疑问,如何得到引起...
  • plean
  • plean
  • 2011年07月04日 14:10
  • 220

__doPostBack

首先,很抱歉,没找到原文地址。今天遇到了__doPostBack函数,在网上看到了很多关于__doPostBack使用的方法,但是感觉说法都有些出入,或者不清楚。因此也让我这个本来一向喜欢引用别人东西...

__doPostBack的总结

转自: http://blog.csdn.net/remy303/article/details/6588247 1.__doPostBack是什么,有什么用?    __doPostBac...
  • wmqdn
  • wmqdn
  • 2012年07月09日 09:57
  • 669

.Net4.0的网站在IE10、IE11出现“__doPostBack未定义”的解决办法。

方法一、浏览器设置成兼容模式。 方法二、安装服务器版的.Net40的补丁。http://download.csdn.net/detail/5653325/6642051 方法三、点击VS的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:__doPostBack 用法
举报原因:
原因补充:

(最多只允许输入30个字)