布鲁斯狼的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有的不能。
[解决办法]
帮顶!