关于前台调用后台事件__doPostBack函数(转载)

转载 2007年09月14日 15:39:00
这里需要提一下的是,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>
 用submit提交是不会触发onsubmit事件的,onsubmit是用submit按钮提交才触发

<form action="bb.asp" name="aa" onsubmit="alert('aa')">
</form>

<SCRIPT LANGUAGE="JavaScript">
<!--
aa.submit();
//-->
</SCRIPT>

ASP.NET中JavaScript 调用后台代码

前序:在不需要右击页面或回发的情况下刷新页面,即JS调用后台代码; 方法一:调用隐藏服务端按钮的点击事件        1、在前端放一个隐藏按钮,将需要调用的后台代码写入OnClick事件中;  ...
  • rosefly110
  • rosefly110
  • 2015年02月12日 18:06
  • 1418

C#前台js调用后台代码

C#前台js调用后台代码 前台js   function Ceshi()   {     var a = "";     alert(a);   } 后台代码 public string Ge...
  • a6225301
  • a6225301
  • 2014年02月26日 12:36
  • 9426

ext.net 后台方法调用

大家知道EXT.NET可以和MVC一起使用,就没有CS页,全部靠JS或者控制域来操作。 另外一种是有CS页面,直接可以后台操作。下面我们就先来说一下直接后台操作的一些注意事项: 首先我们前面提到每个页...
  • lijingrong_ljr
  • lijingrong_ljr
  • 2015年08月19日 16:47
  • 1835

.net 前台调用后台函数的 Ajax 方法

  • 2009年05月14日 18:00
  • 41KB
  • 下载

.NET前台按钮实时调用C#后台方法(函数)

  • 2016年03月13日 23:32
  • 8KB
  • 下载

ASP.NET前台JS与后台CS函数如何互相调用

在实际的Web开发中,我们可能会常常遇到后台调用前台JS代码或者前台JS调用后台代码的情况。今天就把比较实用的前后台相互调用的方法总结出来和大家分享。 后台代码调用前台JS代码 一、说到后台代码调...
  • skyandcode
  • skyandcode
  • 2013年07月06日 18:12
  • 22532

ASP.NET前台JS与后台CS函数如何互相调用

在实际的Web开发中,我们可能会常常遇到后台调用前台JS代码或者前台JS调用后台代码的情况。今天就把比较实用的前后台相互调用的方法总结出来和大家分享。 后台代码调用前台JS代码 一、说到后台代码调...
  • ht_gaogao
  • ht_gaogao
  • 2013年10月25日 00:11
  • 338

asp.net中前台JavaScript库调用后台C#变量和有参函数方法

最近在做项目时,遇到了js库里调用后台的变量和函数的问题,一开始不知道咋办,google了很多。 1.封装成JavaScript库,其中调用后台C#变量:      网上有三种基本方法:  方法一:1...
  • zhoulei13572468
  • zhoulei13572468
  • 2016年05月31日 11:29
  • 516

.net中前台javascript与后台c#函数相互调用问题

C#代码与javaScript函数的相互调用问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在C...
  • lxrj2008
  • lxrj2008
  • 2011年06月28日 21:30
  • 175

ASP.NET前台JS与后台CS函数如何互相调用

在实际的Web开发中,我们可能会常常遇到后台调用前台JS代码或者前台JS调用后台代码的情况。今天就把比较实用的前后台相互调用的方法总结出来和大家分享。 后台代码调用前台JS代码 一、说到后...
  • u014023256
  • u014023256
  • 2014年04月01日 15:09
  • 264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于前台调用后台事件__doPostBack函数(转载)
举报原因:
原因补充:

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