__doPostBack的一些应用

这段时间做了一个小项目,里面用到了很多HTML的控件,如:<button>,为了解决后台取值的问题研究了一下__doPostBack

总结一下心得:

一、 在后台判断哪个按钮点击了。

前台代码:

< button  type ="button"  id ="Button1"  onclick ="__doPostBack('btnReturn','1')" > 查询 </ button >

 注意onclick="__doPostBack('btnReturn','1')"

1、第一个参数表示按钮ID,第二参数随便写的,为的就是在后台确定按钮是否被点击了。

后台代码:

string  controlName  =  Request.Params.Get(  " __EVENTTARGET "  );
string  eventArgument  =  Request.Params.Get(  " __EVENTARGUMENT "  );

//  确定按钮事件
if ( controlName  ==   " btnConfirm "   &&  eventArgument  ==   " 2 "  )
{
   btnConfirm_Click( sender, e );
}

//  查询按钮事件
if ( controlName  ==   " btnReturn "   &&  eventArgument  ==   " 1 "  )
{
   btnReturn_Click( sender, e );
}

 

 2、从后台代码中可以看出__doPostBack的两个参数干什么用的。

详细说一下第二个参数,在这里第二参数的内容没有实际意义,就是为了在后台判断用的。看代码的判断条件用的是 &&,也就是同时满足这两个条件才执行里面的内容。

为什么要这样写?因为如果不指定eventArgument的内容,页面会保存controlName的值,比如在刷新页面的时候,刷新页面的时候controlName的值就是上一次触发 __doPostBack 的控件的ID。所以在这里写了这样的判断,必须两个条件同时满足,才可以视为“某某按钮”被点击了。

二、应用二,利用eventArgument 向后台传递参数。

前台JS代码:

__doPostBack( ' btnDelete ' ,delStr);

 delStr就是向后台传递的一个字符串。

 后台代码:

string  eventArgument  =  Request.Params.Get(  " __EVENTARGUMENT "  );
string [] delStr  =  eventArgument.Split(  ' , '  );

 

三、DataGrid 行选中改变颜色

有些时候想让DataGrid 支持行选中事件,并且改变选中行的颜色。方法如下:

js代码1:

function  selectRow( name )
{
    
//  Get row that was clicked
     var  oRow  =  window.event.srcElement.parentElement;

    
//  Get rows in table
     var  oRows  =  oRow.parentElement.parentElement.rows;
    
if  ( oRows )
    {
        
var  nRows  =  oRows.length;
        $(
' #maxRow ' ).val( nRows + 1  );

        
//  Find the clicked row
         for  (  var  i = 1 ; i < nRows + 1 ; i ++  )
        {
            
if  ( oRows[i - 1 ==  oRow )
            {   
                
//  Found - post an event to the server            
                $( ' #currentSelectRow ' ).val( i + 1  );     
                $(
' #gridFocusSet ' ).val( 1 );
                
                
var  num  =   0 ;
                
if ( ( i  +   1  )  <   10  )
                {
                    num 
=   ' 0 '   +  ( i  +   1  );
                }
                
else
                {
                    num 
=  ( i  +   1  );
                }
                
                
var  ctlParam  =  name  +   ' $ctl '   +  ( num )  +   ' $ctl00 ' ;
                __doPostBack( ctlParam, 
''  );  
                
return ;
            }
        }
    }
    
return ;
}
 

// grid onclick 事件

 

function drgControl_onclick()
{
    $('#currentScrollBarTop').val( $('#divGrid').scrollTop() );    
    selectRow( "drgControl" );
}
//重写__doPostBack
function __doPostBack(eventTarget, eventArgument)
{
    var theform = document.form1;

    if( theform.__EVENTTARGET != null )
    {
        theform.__EVENTTARGET.value = eventTarget;
    }

    if( theform.__EVENTARGUMENT != null )
    {
        theform.__EVENTARGUMENT.value = eventArgument;
    }
    theform.submit();
}

 


 name:就是grid控件的ID。

html 代码:

 

<script type="text/javascript" event="onclick" for="drgControl">drgControl_onclick()</script>

 

为grid添加一个选择按钮,让其可见为false:

 

<asp:ButtonColumn Visible="false" Text="选择" ButtonType="PushButton" CommandName="Select">
</asp:ButtonColumn>
 以上代码可以实现grid行选择事件。

 

原理:

把 asp:ButtonColumn Visible="false"  改为 “true”,然后把grid的页面运行起来,再查看页面源文件,会看到如下内容:

 

<input type="submit" name="drgControl$ctl02$ctl00" value="选择" />
<input type="submit" name="drgControl$ctl03$ctl00" value="选择" />
。。。。

 

。。。。

 

控件被解析了。

 

 

原理就是通过找控件名然后模拟 __doPostBack提交页面。

注意:name="drgControl$ctl02$ctl00" 是vs2005中的表现形式,2003中是name="drgControl:_ctl02:_ctl00"

将 “$”替换为 “:_”。

 


 

 

 

 

 

你可能感兴趣的:(post)