现在的位置: 首页 > 综合 > 正文

Js控制ASPX页面刷新的土办法

2013年10月25日 ⁄ 综合 ⁄ 共 1117字 ⁄ 字号 评论关闭
我们知道在aspx页面里激发一个事件都需要把页面Post到服务器,这样如果在客户端通过调用javascript进行页面刷新,IE就会弹出提示框问是否重新提交,但是我们本意只是想刷新数据显示。怎么办呢,我想的办法就是模拟控件激发事件的动作,让.net误认为是改变了控件的状态或点击了刷新按钮,让页面Post达到刷新数据的作用。

       首先拖入一个服务器控件到aspx页面,设置此控件的ID,这里为了改变状态方便拖入的是checkbox,然后在此控件的代码里加上【style="DISPLAY: none"】这个属性意在隐藏此控件,但不能用【Visible=false】这样控件就不会加载到客户端了。控件的代码如此形式:【<asp:checkbox id="chkReload" style="DISPLAY:none" runat="server" AutoPostBack="True"></asp:checkbox>

       添加客户端js代码:CS页面加入处理此控件的事件代码:这样只要客户端调用js的reload()方法就可以刷新页面了,跟我们点击刷新按钮的效果一致。没有深入研究不知道有没有更好的办法。

<script language="javascript">
function reload()
document.Form1.chkReload.checked 
= !document.Form1.chkReload.checked;
 __doPostBack('chkReload',''); 
}

</script>

 

private void chkReload_CheckedChanged(object sender, System.EventArgs e)
{
            Bind();
}

 

 

确实不是所有aspx文件解析到客户端后都会添加__doPostBack()函数,如果页面上没有需要实现autopostback的控件,就不会添加__doPostBack()函数。

俺补充一下:如果在主页面中有一个DataGrid用来显示表格状数据,并且实现了自定义分页;每一行有一个“编辑”按钮用来弹出一个模态窗口让用户编辑该行数据,如果在编辑完成后,主窗口调用window.location.reload()或者类似的刷新操作,则主窗口的onload事件会被调用,这时问题出现了:DataGrid的页码会被回复到第一页,即以前的ViewState不会被保存下来。这时使用楼主说的办法来代替window.location.reload()就可以达到DataGrid的页码仍然保留在原来页数的效果了。。。。。。。   

抱歉!评论已关闭.