转载:

首先要记住这个函数的前面是两个下划线. __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中的源码中被翻译成了:
<a 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的存在了。

以前我 看到 许多关于 此函数的 用法。可是我一直没有成功过。也没有找到原因。

今天 ,突然 发现 我以前没有成功的原因。

那就是 __doPostBack('Button1','') 函数中的第一个参数 必须是控件的名字,就是Name属性的值 而不是 控件的ID!!

如网上 介绍说是:

function pCall()
{
__doPostBack('Button1','');
}

可以直接刷新页面,执行后台代码。 (控件名如果含有":" ,需要预先替换为"$")

即使控件设为隐藏,(如button的visible = false),页面上没有生成button, 仍然可以这样直接使用。

总结 说,此函数 用法要注意的地方太多,

第一, doPostBack 函数名,很特别,他的前面有两个 下划线。而且大小写要区分好。

第二, 第一个参数 必须用 控件的 name 而不是ID。

控件名有个规律是一层一层的将父控件ID用$符号连接起来的。
MyDataGrid是DataGrid的ID,_ctl13是DataGridItem的ID,lbtnV1是这个linkbutton的ID。其实,通过查看源代码可以看出 来的。

第三, 第二个参数 是传给控件的Value值。

其实,第一个参数对应 Request.Form["__EVENTTARGET"]; 第二个参数对应 Request.Form["__EVENTARGUMENT"];

第四, 此函数是DOTNET 的服务器控件产生的。 所以要使用此函数,必须整个页面上至少要有一个控件 可以回传页面。有些控件 的autoPostBack 必须设为TRUE。

其实,dotnet 服务器控件 在页面上产生两个隐藏的控件
一个名为__EVENTTARGET 另一个名为__EVENTARGUMENT

第一个的值是触发事件的控件名

第二个的值是此控件所带的值

转载于:https://www.cnblogs.com/bfy-19/archive/2012/09/04/2670149.html

__dopostback相关推荐

  1. 使用__doPostBack函数回送表单.

    在asp.net中服务器控件回送表单是通过调用__doPostBack函数来回送表单,触发事件的,先来看看__doPostBack函数: function __doPostBack(eventTarg ...

  2. 深入理解 __doPostBack

    在我的随笔<Page,你是怎样处理回发事件的?>中曾提出一个疑问,如何得到引起页面PostBack的控件?通过阅读Page类的源码,误打误撞,无意中看到了__EVENTTARGET和__E ...

  3. 理解 __doPostBack(转)

    在我的随笔<Page,你是怎样处理回发事件的?>中曾提出一个疑问,如何得到引起页面PostBack的控件?通过阅读Page类的源码,误打误撞,无意中看到了__EVENTTARGET和__E ...

  4. [转]深入理解 __doPostBack

    在我的随笔<Page,你是怎样处理回发事件的?>中曾提出一个疑问,如何得到引起页面PostBack的控件?通过阅读Page类的源码,误打误撞,无意中看到了__EVENTTARGET和__E ...

  5. __doPostBack实现updatepanel的局部更新

    调用方法如下: __doPostBack("UpdataPanel1","")来实现名为UpdatePanel1的更新

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

    关于前台调用后台事件__doPostBack函数 作者:admin 日期:2006-04-11 字体大小: 小 中 大 这里需要提一下的是,asp.net编程提供了服务端控件和客户端控件的说法,其实还 ...

  7. __dopostback的用法

    在.NET中,所有的服务器控件提交到服务器的时候,都会调用__doPostBack这个函数,所以灵活运用这个函数对于我们的帮助还是很大的. 比如,在我们写程序的时候经常会需要动态的生成一些控件,最简单 ...

  8. 深入学习__doPostBack函数

    在.NET中,所有的服务器控件提交到服务器的时候,都会调用__doPostBack这个函数,所以灵活运用这个函数对于我们的帮助还是很大的. 比如,在我们写程序的时候经常会需要动态的生成一些控件,最简单 ...

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

    前段时间做一个.net网站的时候,用到了模拟前端按钮刷新updatePanel进行局部刷新的时候,遇见了这个问题,当时没顾上记下来,查看网上资料,记下来留着以后查看. 很早以前,当我刚接触asp.NE ...

  10. __doPostBack用法 【csdn】

    今天写ajax程序时,需要重新从后台加载数据,所以用了__doPostBack方法. __doPostBack并不是我自己写的方法,是由asp.net 自己加入页面中的方法.我们运行Asp.net程序 ...

最新文章

  1. linux系统常用的中间件
  2. matplotlb.finance导包报错——ModuleNotFoundError No module named mpl finance
  3. Twitter的系统编程
  4. 律师如何加强自身的计算机文化教育网,提高_计算机文化基础_教学效果的几点心得.pdf...
  5. 【转】反病毒攻防研究第003篇:添加节区实现代码的植入
  6. SQL查询重复记录方法大全 转
  7. SAP S/4HANA销售订单创建时,会自动触发生产订单的创建 1
  8. 【招聘(北京)】.NETCORE开发工程师(微服务方向)
  9. python如何操作excel 基础代码
  10. 如何用AI技术增强企业认知智能?超详细架构解读
  11. lis =[2,3,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv'] 将列表lis中的'tt'变成大写(用两种方式)。...
  12. honor magicbook 16pro
  13. 经典鸡兔同笼同类型问题
  14. appbase 和docbase
  15. Player 本地播放器推荐-倍速播放-本地视频播放器-播放器-电脑手机互传文件-附下载地址
  16. 网站添加头部Meta property=og协议的使用方法详解教程
  17. Android性能优化之使用线程池处理异步任务
  18. 深入Python进程间通信原理
  19. 《python深度学习》学习笔记与代码实现(第六章,6.3 循环神经网络的高级用法)
  20. 如何获取二维数组的长和宽

热门文章

  1. java后台工具类-通过交易码获得方法名
  2. [Luogu] P1939 【模板】矩阵加速(数列)
  3. CentOS挂Windows的NFS备忘
  4. angular的uiRouter服务学习(5) --- $state.includes()方法
  5. [NOIP2016]愤怒的小鸟 状态压缩dp
  6. PHP闭包(Closure)初探(转载 http://my.oschina.net/melonol/blog/126694?p=2#comments)
  7. 编写一个函数func(),将此函数的输入参数(int型)逆序输出显示,如54321 – 12345,要求使用递归,并且函数体代码不超过8行...
  8. JSONP 跨域共享信息
  9. CSUOJ 1196- Staginner 去爬山
  10. .Net Excel 部分操作