Webpage has expired 和 动态生成的表Table的第一行固定

来源:互联网 发布:万国数据上市吗 编辑:程序博客网 时间:2024/05/21 06:01

1.   ASP.NET在按Backword或者Forward的时候,出现错误:Webpage has expired

我们可以用以下方式解决:

一种方法是在后台用下面的方法:

在Page_load函数中添加以下代码,这样当postback的时候就可以确保page每次都是从Server端获得的:

C#代码:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

另一种方法是在前台可以用下面的方式解决

我们用JavaScript把浏览器的back按钮或者forward按钮给禁用了,下面的代码可以放在前台页面的head部分:

JavaScript代码:

<scripttype="text/javascript">

   functionpreventBack(){window.history.forward();}

    setTimeout("preventBack()", 0);

    window.onunload=function(){null};

</script>

2.   动态生成的表Table的第一行固定

2.1 问题

在表格向下滚动的时候,由于第一行因为滚动而隐藏了,所以最我们看不到表头信息,为了解决这个问题,看下面的叙述:

2.2 解决方案

在ASP.NET生成的表进行设计的时候,我们可以使用两个表来完成一个表的功能,一个表叫HeadTabel,另一个叫做RowTable;然后我们把这两个表分别放在一个DIV中,这个两个DIV,分别叫做HeadDiv和RowDiv;并且要设置这个2个Div的height和width,和Scrollbar,因为只有设置了Div的height和width后,当headTable或者RowTable的height或者width超过了Div的height或者width后,才会出现Scrollbar;

Table和Div的构造按照以下方式:

    <div id ="HeaderDiv" style="width:920px;height:40px;overflow:hidden;"runat="server">

        <tableid="HeaderTable"  runat="server">

        </table>

    </div>

  

    <div id ="RowDIV" style="width:940px;height:360px;overflow:scroll;"runat="server">

        <tableid="rowTable"  runat="server">

        </table>

</div>

 

这里RowDiv的滚动条设置为overflow:scroll, 而HeadDiv的滚动条设置为overflow:hidden,这里这样设置是为了防止出现2个滚动条;

为了使得当RowDiv的滚动条横向滚动时,HeadDiv的也跟着滚动到相应的位置,我们必须给RowDiv加上滚动条相应事件,这里为了在后台动态添加Div控件的事件函数,我们让这个2个DIV的runat属性设置为server:

 

C#后台添加事件:

 

rowTableDiv.Attributes.Add("onscroll", "onScrollMove(this)");

 

Javascript前台代码:

         functiononScrollMove(control) {

 

            varhead_div = document.getElementById('ContentBottom_tableHeaderDiv');

            if(head_div != null)

            {

                head_div.scrollLeft =control.scrollLeft;

            }

 

        }

 

当然,仅仅这样做有个缺点,当表中数据位空的时候,只有HeadTable里面的列名,当列名长度大于HeadDiv的长度的时候,HeadTable靠近右面的列名就看不到了,因为HeadDiv的滚动条是隐藏的;为了解决这个问题我们要分情况:

1) 当RowTable的行数大于等于1时,我们使得RowDiv的Scorll Bar事件控制HeadDiv的ScorllBar位置,此时RowDiv的overflow属性为scroll, 而HeadDiv的overflow属性为:hidden;

2) 当RowTable的行数为0时,我们使得HeadDiv的Scorll Bar控制其自己,把RowDiv的Scroll Bar隐藏掉,此时此时RowDiv的overflow属性为hidden, 而HeadDiv的overflow属性为:scroll;

我们这样可以在后台用代码控制其属性设置:

C#代码如下:

 

 HeadDiv.Style.Add("overflow","scroll");

   RowDiv.Style.Add("overflow", "hidden");

 

这里需要注意:只有当Tableheight或者width大于了Divheightwidth的时候,这是DIVScorll Bar才会出现