_doPostBack用法总结
转载在以下两篇博客:
http://www.cnblogs.com/yongtaiyu/archive/2011/05/13/2045746.html
http://www.cnblogs.com/Fooo/archive/2009/08/19/1549908.html
今天写ajax程序时,需要重新从后台加载数据,所以用了__doPostBack方法。 __doPostBack并不是我自己写的方法,是由asp.net 自己加入页面中的方法。我们运行Asp.net程序后,会在生成的html源码中看到__doPostBack方法,其代码如下:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
__doPostBack说明: __doPostBack可以实现客户端控件调用服务器端控件的响应。 __doPostBack方法的格式为: __doPostBack(eventTarget,eventArgument) 参数: eventTarget:是要触发的服务器控件的客户端ID eventArgument:参数
这个两个值在后台可以通过下边方法得到: Request["__EVENTTARGET"] :获取得到引发页面PostBack的控件ID Request["__EVENTARGUMENT"]: 获取参数。
例子,回发UpDataPanel,通过参数获取资料。 1)首先调用doPostBack触发回发:
说明:
ctl00_ContentPlaceHolder1_upModulePower:是加了母版页后的生成的客户端ID。
jsPostback:用于判断是不是通过js控件触发的回发。因为UpDatePanel中会有其它服务器控件解发的回发,所以用此参数加以区分。
2) 在后台PageLoad中得到参数,并取数据。
其它问题: 但是在我们调用__doPostBack函数时,有些时候调用这个函数会出现"对象不存在"的脚本错误? 那是因为Html里面没有__doPostBack函数体,一般在拖放那些有自动回传功能的控件时,当把他的autoPostback属性设为True,在运行的时候系统会自动添加__doPostback函数体。当然最直接的办法就是添加一个LinkButton。在页面中加如 LinkButton ,页面就会在页面中加载POSTBACK所需的JS,然后把其Text属性设为空,切记不要设 Visible属性,因为如果Visible=false,在翻译成Html时,直接就忽略LinkButton的存在了
在.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.查看源代码,发现里面多了下面行
<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" value="" /> <input type="hidden" value="" />
_doPostBack用法总结的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- [itint5]环形最大连续子段和
http://www.itint5.com/oj/#9 一开始有了个n*n的算法,就是把原来的数组*2,由环形的展开成数组.然后调用n次最大子段和的方法.超时. 后来看到个O(n)的算法,就是如果不跨 ...
- HDU4857——逃生(反向建图+拓扑排序)(BestCoder Round #1)
逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同时,社会 ...
- 观察者模式实现INotifyPropertyChanged
其实一直不知道INotifyPropertyChanged这个接口中PropertyChanged事件是什么时候有值的,因为在使用的时候,只要按步骤来就可以,因为我自己并没有对这个事件赋值,所以很好奇 ...
- WinAPI——钩子函数大全
SetWindowsHookEx 函数功能:该函数将一个应用程序定义的挂钩处理过程安装到挂钩链中去,您可以通过安装挂钩处理过程来对系统的某些类型事件进行监控,这些事件与某个特定的线程或系统中的所有事件 ...
- bzoj2595
一开始看是插头dp,后来发现还有一个叫斯坦纳树的东西 什么叫斯坦纳树,就是使给定点连通开销和最小的树(可以包含多余的点) 到这张平面图上,我们不难想到用dp来解决,设f[x,y,S]表示连通集合为S, ...
- (五)学习JavaScript之firstChild 属性
参考:http://www.w3school.com.cn/jsref/prop_node_firstchild.asp 定义和用法 firstChild 属性返回指定节点的首个子节点,以 Node ...
- SharePoint 2013 入门教程--系列文章
转:http://www.cnblogs.com/jianyus/p/3381415.html 以下文章是自己在学习SharePoint的过程中,不断积累和总结的博文,现在总结一个目录,分享给大家.这 ...
- ASP.NET MVC 基础
ASP.NET MVC oo1 Mvc准备工作课程安排:ORM->AspNet MVC开发环境:VS2012/VS2013SqlServer2008/2005主讲Asp.Net Mvc4 Raz ...
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.4
If $\dim \scrH=3$, then $\dim \otimes^3\scrH =27$, $\dim \wedge^3\scrH =1$ and $\dim \vee^3\scrH =10 ...
- myeclipse10 安装 testng插件
下载插件: http://pan.baidu.com/s/1c0pghFE 放到dropins目录