首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

布鲁斯狼的TabPane 选项卡刷新时引起的有关问题

2011-12-10 
布鲁斯狼的TabPane 选项卡刷新时引起的问题我是采用Table+CSS这种方法来实现的TabPane选项卡功能:现在有一

布鲁斯狼的TabPane 选项卡刷新时引起的问题
我是采用Table+CSS这种方法来实现的TabPane   选项卡功能:现在有一个问题:

如果我在第四选项卡上单击提交按钮,把数据保存到数据库,那么页面就会刷新一次,这样就又回到了第一选项卡上,请问大家这个问题怎么解决?想实现无刷新是不可能的吧?怎么样能让页面刷新的时候让第四选项卡处于选中状态呢?

      <style   type=text/css>
td   {  
    font-size:   12px;
    color:   #000000;
    line-height:   150%;
    }
.sec1   {  
    background-color:   #EEEEEE;
    cursor:   hand;
    color:   #000000;
    border-left:   1px   solid   #FFFFFF;
    border-top:   1px   solid   #FFFFFF;
    border-right:   1px   solid   gray;
    border-bottom:   1px   solid   #FFFFFF
    }
...
.main_tab   {
    background-color:   #D4D0C8;
    color:   #000000;
    border-left:1px   solid   #FFFFFF;
    border-right:   1px   solid   gray;
    border-bottom:   1px   solid   gray;  
    }
</style>
      <script   language=javascript>
function   secBoard(n)
{
  for(i=0;i <secTable.cells.length;i++)
    secTable.cells[i].className= "sec1 ";
  secTable.cells[n].className= "sec2 ";
  for(i=0;i <mainTable.tBodies.length;i++)
    mainTable.tBodies[i].style.display= "none ";
  mainTable.tBodies[n].style.display= "block ";
}
</script>
      <table   border=0   cellspacing=0   cellpadding=0   width=549   id=secTable>
        <tr   height=20   align=center>  
          <td   class=sec2   width=10%   onclick= "secBoard(0) "> 关于TBODY标记 </td>
          <td   class=sec1   width=10%   onclick= "secBoard(1) "> 关于cells集合 </td>
          <td   class=sec1   width=10%   onclick= "secBoard(2) "> 关于tBodies集合 </td>
          <td   class=sec1   width=10%   onclick= "secBoard(3) "> 关于display属性 </td>
        </tr>
      </table>
      <table   border=0   cellspacing=0   cellpadding=0   width=549   height=240   id=mainTable   class=main_tab>
        <tbody   style= "display:block; ">  
        <tr>  
          <td   align=center   valign=top>   <br>
            <br>
            这里填加内容,略去。1   </td>
        </tr>
        </tbody>  
...
      </table>


[解决办法]
关注
[解决办法]
<table border=0 cellspacing=0 cellpadding=0 width=549 height=240 id=mainTable class=main_tab>
<tbody style= "display:block; ">


<tr>
<td align=center valign=top>
<asp:PlaaceHolder id=xxx runat=server> </asp:PlaaceHolder>
</td>
</tr>
</tbody>
...
</table>


代码中应该是:
Control uc;
if(ViewState[ "TabNum ")==null || (int)ViewState[ "TabNum "]==0)
uc=this.Page.LoadControl( "tab_0.ascx ");
else if((int)ViewState[ "TabNum "]==1)
uc=this.Page.LoadControl( "tab_1.ascx ");
else if((int)ViewState[ "TabNum "]==2)
uc=this.Page.LoadControl( "tab_2.ascx ");
else if((int)ViewState[ "TabNum "]==3)
uc=this.Page.LoadControl( "tab_2.ascx ");
uc.ID= "InnerTabPanel ";
xxx.Controls.Add(uc);
//使用 ((myUserControlInterface)uc).属性 来设置其它参数
//同样方法根据ViewState[ "TabNum "]设置选项标签。

在选中选项标签的时候,应该记录入 ViewState[ "TabNum "] 中。

关于“无刷新”,一个最容易想当然的解决方案就是一切都在javascript中做,从不与服务器交互。这当然是最容易想到的做法,但是有几个人真正用javascript做过信息系统的?就算可以,如果用户操作的过程中服务器关闭了、客户端出问题了等等,中间的数据也就丢弃了。在订单录入时,至少需要按行记录到的服务器数据库中,并且至少按行及时检查出录入数据的异常,而不是等表单整个输入完才检验。这是友好的交互操作界面的基本要求。

因此无刷新还是需要与服务器交互的,从smartnavigation(通过iframe)或者icallbackeventhandler(通过xmlhttpreqeust或者iframe)都是可以的。asp.net中的treeview控件、GridView控件就在个别功能上使用了后者完成Ajax刷新操作。前者非常简单,只需要写一条语句就能将整个页面处理好,缺点是速度有些慢。后者是现代的Ajax,缺点是框架结构鱼龙混杂,有真正能够在一个交互中对页面上多个控件局部刷新的,有的则是假的只能刷新一个Panel,并且有的能维护ViewState有的不能。
[解决办法]
帮顶!

热点排行