关于前台调用后台事件__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-10-25 11:56:46

关于前台调用后台事件__doPostBack函数_实用技巧的相关文章

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

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

ASP.Net前台调用后台变量的方法_基础应用

Net前台调用后台变量 1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %>: 是在绑定控件DataBind()方法执行时被执行,用于数据绑定 如: < %# Container.DataItem("tit") %> < %= %>: 在程序执行时被调用,可以显示后台变量值 如: *.aspx中: < %=

Asp.net后台调用js 2种方法_实用技巧

1. 用Response.Write方法 代码如下: 复制代码 代码如下: Response.Write("<script type='text/javascript'>alert("XXX");</script>"); 此方法缺陷就是不能调用脚本文件中的自定义的函数,只能调用内部函数,具体调用自定义的函数只能在Response.Write写上函数定 义,比如 复制代码 代码如下: Response.Write("<scrip

asp.net中button控制先执行js再执行后台程序的方法_实用技巧

本文实例讲述了asp.net中button控制先执行js再执行后台程序的方法.分享给大家供大家参考.具体分析如下: 在.net中要实现button控制点击之后先执行js再执行后台程序这个看上去没什么难度,这里我们就一起来看一个asp.net中button控制先执行js再执行后台程序的实现方法,希望可以帮助到各位. 关于button这个服务器控件,我一直想减少它向服务器提交数据.那些检测,还是在客户端实现就好了. 这就需要javascript,但是我发现仅仅有javascript还是不够的.but

.net后台代码调用前台JS的两种方式_实用技巧

1   这种方式只能调用简单的JS代码.不能调用自定义的函数. 复制代码 代码如下:           string jss = "<script language='javascript' type='text/javascript'>  alert('hello')</script>";          Response.Write(jss); 2   通用方法.其中的的 mya()是前台 代码 中自定义的一个函数.           (1)    复

asp.net后台cs中的JSON格式变量在前台Js中调用方法(前后台示例代码)_实用技巧

复制代码 代码如下: //后台cs代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Login_jg : System.Web.UI.Page { protected void Page_Load(object sende

MVC后台创建Json(List)前台接受并循环读取实例_实用技巧

---------------------------后台------------------- 复制代码 代码如下: [HttpPost] public JsonResult CheckStock(IEnumerable<pvIdsCount> pvIds) { var resultList = new List<pvIdsCount>(); if (pvIds != null) { foreach (var pvIdsCount in pvIds) { var pvId = p

asp.net(C#)中给控件添加客户端js事件的方法_实用技巧

放在服务器端,也可以用ajax来实现,不刷页面.但我觉得有更直接更简单方法,用一个js事件是可以实现的. 但,DropDownList不偈Button等控件提供了一些像"OnClientClick"前台事件,只有服务端事件. 想到,所有C#页面代码,最终都是生成HTML,js事件也是最终运在浏览器中,以Html为基础的.服务端控件最终生成的HTML控件有什么js事件,我们应该就能在aspx中给它添加相应的事件. DropDownList 生成的Htm是元素<Select>是

asp.net关于onpropertychange和oninput事件实现代码_实用技巧

整体思路是这样,当文本框的值改变时触发事件,对列表中原有的值进行过滤. 根据这个思路,首先需要解决的无非是确定文本框的什么事件可以满足要求,当时第一个想到的是onkeydown或者onkeypress,在试的过程中发现再输入中文时,无法响应,因为输入方会将焦点给屏蔽了.在网上寻觅了一会发现onpropertychange事件为改变文本属性时就会出发,所以当文本框输入数据的时候其实是在改变文本框的value属性.而且中文也可以满足,本以为大功告成,最后才发现这个事件为IE的专属事件,其他的浏览器并