__doPostBack简单的使用方法

这里需要提一下的是,asp.net编程提供了服务端控件和客户端控件的说法,其实还是脱离不了HTML的本质,客户端和服务端需要交互必须要提交,提交有两种方式get和post,get就是通过向服务端发送连接地址,服务端通过地址的参数来获得信息的,一般这些参数都是明文,能在浏览器地址栏看到。而post是通过表单的input等元素提交到服务端的页面的,这些数据一般是看不到的。asp.net的服务端控件其实就是对一般的HTML控件做了个包装,大体是通过隐藏控件提供控制的参数的。  
这里介绍一个常用的函数_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" name="__EVENTTARGET" value="" />   
<input type="hidden" name="__EVENTARGUMENT" value="" />

值得注意的是,_doPostPack的第一个参数是大小写不敏感的

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

复制代码代码如下:

<script language="javascript">  
<!--  
function __doPostBack_Ex(eventTarget, eventArgument)   
{  
var theform;  
if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {  
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);  
}

}  
// -->  
</script>

时间: 2024-08-29 20:52:42

__doPostBack简单的使用方法的相关文章

2016.03.03 学习笔记 三种向ListView中填充简单文本的方法

Android 中ListView是很重要的一块内容 掌握ListView的基本用法 对学习安卓起着举足轻重的作用 今天就介绍一下三种向ListView 填充简单文本的方法 填充其他数据类型的用法之后介绍. 第一种:直接向adapter中添加数据 public class MainActivity extends Activity { private ListView lv1; private ArrayAdapter<String> adapter; protected void onCre

Jenkins的安装(最为简单的安装方法)

1.Jenkins的安装(最为简单的安装方法) (1)下载Jenkins(一个war文件) (2)cmd运行:java -jar jenkins.war [Jenkins需要IDK1.5以上的版本] Jenkins的默认端口号是8080,以下是Jenkins的安装成功运行的页面:

java线程的简单实现及方法

java线程: 线程是一个程序内部的顺序控制流. cpu实际上在一个时间点上,只执行一个.只不过我们把cpu分成了多个时间片,由于速度很快,我们看起来像是多个线程.. 就像你的时间分成几片,这样 整体看来做事情有规律,效率就会高,何况是cpu呢. 线程的创建和启动: 方法一: java线程通过java.lang.Thread类来实现. VM启动时会有一个主方法所定义的线程, 每一个线程是Tread对象通过它的run()方法来完成操作. 启动线程方式:Thread的start()方法. 如下代码:

奔五的人学ios:swift竟然没有字符串包括,找个简单的解决方法

swift关于字符串的推断中 有前导.有后缀 两个方法.竟然没有包括推断. 经过学习找了个简单的解决方法: extension String { func has(v:String)->Bool { return self.componentsSeparatedByString(v).count > 1 } }

最简单的丰胸方法(专家Q:541858080)

丰满.自然.健康.挺拔,在男人心中,这些评语占有非常突出的地位,加强了女人的曲线魅力,它像一个巨大的磁场,对男性具有强大的吸引力,如果不具备,应该如何丰胸.关键是选择自然健康的丰胸方法.说到哪种方法丰胸好,我就写下我曾经我是如何丰胸的,希望可以帮助那些还在因为丰胸而困扰的朋友们.最简单的丰胸方法?还在为你平平的飞机场发愁吗?还是没有办法挺胸找回自信吗?『亦姿佳美乳霜』让你靓丽自信! 最简单的丰胸方法 我的男友曾经很花心,说起来我能和他在一起,真是不容易.为了他,我开始关注可以快速丰胸的运动的问题

简单工厂,工厂方法,抽象方法

首先:简单工厂,工厂方法,抽象工厂三者 都属于创建型模式.主要功能是帮助我们把对象的实例部分抽象出来.优化了系统的架构,并且增强了系统了扩展性. 1:简单工厂 简单工厂模式的工厂类一般是使用静态方法,实质是由一个工厂类根据传入的参数,动态的决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 工厂角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象. 抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例共有的公共接

WEB开发中一些常见的攻击方式及简单的防御方法

WEB开发中一些常见的攻击方式及简单的防御方法 20151127 转载http://www.lvtao.net/dev/582.html SQL注入最常见的攻击方式,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. 跨站脚本攻击(XSS)跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取

iOS 当键盘覆盖textFiled时简单的处理方法

//方法1--- - (void)textFieldDidBeginEditing:(UITextField *)textField { if (iPhone5) { return; } else { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; [UIView setAnimationDelegate:self]; //设定动画开始时的状态为目前画面上的样子 [UIView setAn

统计学习基础(第二版)两种简单的预测方法:最小二乘和最近邻

2.3两种简单的预测方法:最小二乘和最近邻 在本节中我们详细讨论两种简单但有效的预测方法,使用最小二乘线性模型拟合和k最近邻预测.线性模型对结构做了大量的假设,但是可能会产生不准确的预测.K-最近邻对结构做了适当的假设,所以预测通常是精确但不稳定的. 2.3.1线性模型和最小二乘 在过去的30年中,线性模型一直是统计学的支柱,而且现在依然是我们最重要的工具之一.给定一个输入向量,通过以下模型来预测Y: 其中是截距,在机器学习中又叫做偏置,通常在X中包含一个常数变量1,在系数向量中包含是方便的.这