__doPostBack的一些应用
这段时间做了一个小项目,里面用到了很多HTML的控件,如:<button>,为了解决后台取值的问题研究了一下__doPostBack
总结一下心得:
一、 在后台判断哪个按钮点击了。
前台代码:
注意onclick="__doPostBack('btnReturn','1')"
1、第一个参数表示按钮ID,第二参数随便写的,为的就是在后台确定按钮是否被点击了。
后台代码:
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。所以在这里写了这样的判断,必须两个条件同时满足,才可以视为“某某按钮”被点击了。
前台JS代码:
delStr就是向后台传递的一个字符串。
后台代码:
string[] delStr = eventArgument.Split( ',' );
三、DataGrid 行选中改变颜色
有些时候想让DataGrid 支持行选中事件,并且改变选中行的颜色。方法如下:
js代码1:
{
// 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 事件
{
$('#currentScrollBarTop').val( $('#divGrid').scrollTop() );
selectRow( "drgControl" );
}
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 代码:
为grid添加一个选择按钮,让其可见为false:
</asp:ButtonColumn>
原理:
把 asp:ButtonColumn Visible="false" 改为 “true”,然后把grid的页面运行起来,再查看页面源文件,会看到如下内容:
。。。。
原理就是通过找控件名然后模拟 __doPostBack提交页面。
注意:name="drgControl$ctl02$ctl00" 是vs2005中的表现形式,2003中是name="drgControl:_ctl02:_ctl00"
将 “$”替换为 “:_”。