使用Javascript调用回调函数__doPostBack()

时间:2022-01-12 05:35:25

     2005-12-8  试用了一下Ajax.Net Pro,发现5.11.4.2与UltraWebGrid有冲突,改用Ajax.NET Professional pre-build 5.10.6.1,可以与UltraWebGrid一起使用,但是最后才发现Ajax并不能实现我的要求。
     Ajax使用了另一个http connection来与后台处理,并不能返回当前页上的Asp.net的Web组件状态,而我需要的是使用Javascript函数来返回当前页面上的Web组件状态,对页面刷新没要求,晕,一开始就走错路了。

    在google上找到一篇文章,这才是我需要的。
http://blurlzy.cnblogs.com/archive/2004/05/13/9314.html
在Form上放一个LinkButton,然后将Text属性设为空,再在script里可以用了:__doPostBack('LinkButtonID','');
休息不好就是不行啊。本来简单的东西非要搞复杂。

    2005-12-9   因为需要动态生成一些功能,上面的方法还是比较笨,想了一晚上,既然是用Form的Submit提交上去的,在PageLoad里用Request取到再判断不就行了。马上试了一下,可以了。

    Asp.net 自动生成的__doPostBack代码:

< 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 >


    Asp.net后台代码:

         private   void  Page_Load( object  sender, System.EventArgs e)
        {
            
if ( ! Page.IsPostBack)
            {
                
// 第一次加载页面
            }
            
else
            {
                
// PostBack后
                
// __EVENTTARGET
                lblInfo.Text = (Request[ " __EVENTTARGET " ] == null ?   ""  : Convert.ToString(Request[ " __EVENTTARGET " ]);

                
// __EVENTARGUMENT
                lblCaption.Text = (Request[ " __EVENTARGUMENT " ] == null ?   ""  : Convert.ToString(Request[ " __EVENTARGUMENT " ]);
            }
        }

    .aspx里的调用代码:

< href ="javascript:__doPostBack('hahaha','param1')" > 测试 </ a >

    结果:
    lblInfo显示值:hahaha
    lblCaption显示值:param1