程序员人生 网站导航

JavaScript提高:005:ASP.NET使用easyUI TABS标签显示问题

栏目:互联网时间:2014-09-17 02:06:50
前面使用easy ui来实现了一个tabs标签(http://blog.csdn.net/yysyangyangyangshan/article/details/38307477),不过在ASP.NET中使用时发现了一个问题。
大家都知道,asp.net页面的控件,当控件的事件不是使用 "return js函数();"时,或者控件注册的是后台的事件,那么整个页面会重新加载的。此时这个easy ui实现的tabs标签,总是回到了第一个tab页。虽然可以借助ajax和jQuery的方法,来实现前后台交互
($.ajax方式前后台交互:http://blog.csdn.net/yysyangyangyangshan/article/details/22438077
$.post方式前后台交互:http://blog.csdn.net/yysyangyangyangshan/article/details/22755007)。
可以把后台的数据转换为json字符串形式,传递给前台,前台经过拆分还原出内容,赋值给对应的控件。这也不失为一种方式。
不过,javascript毕竟只是一个辅助的语言,在ASP.NET中如果把所有的前后台交互都用js这种方式实现,那是不可能的,那就成了舍本逐末,毕竟是用ASP.NET的事件机制,还是很方便的。
针对这个tabs问题,该如何解决呢?
思路很简单,无非就是记住上次选中的tab页,然后当页面刷新时读取出上次的tab,在初始化页面的时候,强制显示指定的tab页。
这里有几个步骤比较重要:
1、记录选中的tab;
2、读取指定的tab;
3、显示指定的tab。


关于用到的easyui的js以及样式文件,前文已经说过了(http://blog.csdn.net/yysyangyangyangshan/article/details/38306591)。


直接看所有的代码:
前台代码如下:
[html] view plaincopyprint?
  1. <html xmlns="http://www.w3.org/1999/xhtml"> 
  2. <head runat="server"> 
  3.     <title></title> 
  4.     <link href="Scripts/EasyUI/themes/icon.css" rel="stylesheet" type="text/css" /> 
  5.     <link href="Scripts/EasyUI/themes/default/easyui.css" rel="stylesheet" type="text/css" /> 
  6.     <script src="Scripts/EasyUI/jquery-1.8.0.min.js" type="text/javascript"></script> 
  7.     <script src="Scripts/EasyUI/jquery.easyui.min.js" type="text/javascript"></script> 
  8.     <script src="Scripts/EasyUI/easyui-lang-zh_CN.js" type="text/javascript"></script> 
  9.     <script src="Scripts/Common.js" type="text/javascript"></script> 
  10.     <script src="Scripts/Ajax.js" type="text/javascript"></script> 
  11. </head> 
  12. <body> 
  13. <form id="form1" runat="server" > 
  14.   <div id="tabTop"> 
  15.     <div title="标签一" runat="server"> 
  16.       <table> 
  17.        <tr> 
  18.         <td> 
  19.          <asp:Button ID="btn1" runat="server" Text="点击1" OnClick="Tab1_Button_Click"/> 
  20.         </td> 
  21.        </tr> 
  22.       </table> 
  23.     </div> 
  24.     <div title="标签二" runat="server"> 
  25.       <table> 
  26.        <tr> 
  27.         <td> 
  28.          <asp:Button ID="btn2" runat="server" Text="点击2"  OnClick="Tab2_Button_Click"/> 
  29.         </td> 
  30.        </tr> 
  31.       </table> 
  32.     </div> 
  33.   </div> 
  34.   </form> 
  35. </body> 
  36.  
  37.  
  38. <script type="text/javascript"> 
  39.  
  40.  
  41.      $('#tabTop').tabs({ 
  42.          width: $("#tabTop").parent().width(), 
  43.          height: "auto", 
  44.          onSelect: function (title) { 
  45.              //这是默认的选中事件,但是当执行了pageload这个也会执行 
  46.          } 
  47.      }); 
  48.      //初始化―始终显示后台保存的标签 
  49.      $(document).ready(function () { 
  50.          var tabTitle = parseInt("<%=GetSelectedTab()%>"); 
  51.          if (tabTitle != null && tabTitle >=0) { 
  52.              $("#tabTop").tabs("select", tabTitle); 
  53.          } 
  54.  
  55.  
  56.          $('#tabTop').bind('click', function () { 
  57.              buttonTabHeadClick(); 
  58.          }); 
  59.      }); 
  60.  
  61.  
  62.      //标签页点击事件 
  63.      function buttonTabHeadClick() { 
  64.  
  65.  
  66.          var title = parseInt($('.tabs-selected').index()); 
  67.          var oldTitle =parseInt("<%=GetSelectedTab()%>"); 
  68.          if ( oldTitle>=0 && title == oldTitle) { 
  69.              return false; 
  70.          } 
  71.          var selectObj = new Object(); 
  72.          selectObj.SelectTabTitle = title
  73.          selectObj.OperateType = "TabTitle"
  74.  
  75.  
  76.          var htmlObjects = $.ajax({ 
  77.              type: "POST", 
  78.              data: selectObj, 
  79.              async: true, 
  80.              success: function (result) { 
  81.              }, 
  82.              error: function (result) { 
  83.              } 
  84.          }); 
  85.          return false; 
  86.      } 
  87.   </script> 
  88. </html> 
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <link href="Scripts/EasyUI/themes/icon.css" rel="stylesheet" type="text/css" /> <link href="Scripts/EasyUI/themes/default/easyui.css" rel="stylesheet" type="text/css" /> <script src="Scripts/EasyUI/jquery-1.8.0.min.js" type="text/javascript"></script> <script src="Scripts/EasyUI/jquery.easyui.min.js" type="text/javascript"></script> <script src="Scripts/EasyUI/easyui-lang-zh_CN.js" type="text/javascript"></script> <script src="Scripts/Common.js" type="text/javascript"></script> <script src="Scripts/Ajax.js" type="text/javascript"></script> </head> <body> <form id="form1" runat="server" > <div id="tabTop"> <div title="标签一" runat="server"> <table> <tr> <td> <asp:Button ID="btn1" runat="server" Text="点击1" OnClick="Tab1_Button_Click"/> </td> </tr> </table> </div> <div title="标签二" runat="server"> <table> <tr> <td> <asp:Button ID="btn2" runat="server" Text="点击2" OnClick="Tab2_Button_Click"/> </td> </tr> </table> </div> </div> </form> </body> <script type="text/javascript"> $('#tabTop').tabs({ width: $("#tabTop").parent().width(), height: "auto", onSelect: function (title) { //这是默认的选中事件,但是当执行了pageload这个也会执行 } }); //初始化―始终显示后台保存的标签 $(document).ready(function () { var tabTitle = parseInt("<%=GetSelectedTab()%>"); if (tabTitle != null && tabTitle >=0) { $("#tabTop").tabs("select", tabTitle); } $('#tabTop').bind('click', function () { buttonTabHeadClick(); }); }); //标签页点击事件 function buttonTabHeadClick() { var title = parseInt($('.tabs-selected').index()); var oldTitle =parseInt("<%=GetSelectedTab()%>"); if ( oldTitle>=0 && title == oldTitle) { return false; } var selectObj = new Object(); selectObj.SelectTabTitle = title; selectObj.OperateType = "TabTitle"; var htmlObjects = $.ajax({ type: "POST", data: selectObj, async: true, success: function (result) { }, error: function (result) { } }); return false; } </script> </html>

$(document).ready(function ():这里是初始化页面时执行的方法,在这里读取之前保存的tab页的索引,然后让tabs显示保存的那个索引的tab;同时还绑定了一个tab标签的click事件;
function buttonTabHeadClick():这个函数,就是当tab标签被选中时记录当前标签的索引,此处用后台的一个静态变量来保存的;
"<%=GetSelectedTab()%>":完成前台调用后台的方法。
两个按钮 点击1和点击2 是测试用的,如果不做任何处理,每当按钮点击时,tabs总会显示第一个了。

后台代码:
[csharp] view plaincopyprint?
  1. public partial class _Default : System.Web.UI.Page 
  2.    { 
  3.        protected static string SelectTabTitle = "0"
  4.  
  5.  
  6.        protected void Page_Load(object sender, EventArgs e) 
  7.        { 
  8.            if (!IsPostBack) 
  9.            { 
  10.  
  11.  
  12.            } 
  13.  
  14.  
  15.            switch (Request["OperateType"]) 
  16.            { 
  17.                case "TabTitle"
  18.                    SetSelectedTab(); 
  19.                    break
  20.  
  21.  
  22.                default
  23.  
  24.  
  25.                    break
  26.            } 
  27.        } 
  28.        /// <summary> 
  29.        /// 保存选中的tab 
  30.        /// </summary> 
  31.        private void SetSelectedTab() 
  32.        { 
  33.            SelectTabTitle = Request["SelectTabTitle"]; 
  34.        } 
  35.        /// <summary> 
  36.        /// 获取选中的tab 
  37.        /// </summary> 
  38.        /// <returns></returns> 
  39.        protected string GetSelectedTab() 
  40.        { 
  41.            return SelectTabTitle; 
  42.        } 
  43.  
  44.  
  45.        protected void Tab1_Button_Click(object sender, EventArgs e) 
  46.        { 
  47.  
  48.  
  49.        } 
  50.  
  51.  
  52.        protected void Tab2_Button_Click(object sender, EventArgs e) 
  53.        { 
  54.  
  55.  
  56.        } 
  57.    } 
public partial class _Default : System.Web.UI.Page { protected static string SelectTabTitle = "0"; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { } switch (Request["OperateType"]) { case "TabTitle": SetSelectedTab(); break; default: break; } } /// <summary> /// 保存选中的tab /// </summary> private void SetSelectedTab() { SelectTabTitle = Request["SelectTabTitle"]; } /// <summary> /// 获取选中的tab /// </summary> /// <returns></returns> protected string GetSelectedTab() { return SelectTabTitle; } protected void Tab1_Button_Click(object sender, EventArgs e) { } protected void Tab2_Button_Click(object sender, EventArgs e) { } }
效果如下:

即使在标签2下点击按钮,页面刷新完后,依然显示标签2。
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐