JavaScript提高:005:ASP.NET使用easyUI TABS標簽顯示問題
來源:程序員人生 發布時間:2014-09-17 02:06:50 閱讀次數:2530次
前面使用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?
- <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>
<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?
- 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;
- }
- }
-
-
-
- private void SetSelectedTab()
- {
- SelectTabTitle = Request["SelectTabTitle"];
- }
-
-
-
-
- protected
string GetSelectedTab()
- {
- return SelectTabTitle;
- }
-
-
- protected
void Tab1_Button_Click(object sender, EventArgs e)
- {
-
-
- }
-
-
- protected void Tab2_Button_Click(object sender, EventArgs e)
- {
-
-
- }
- }
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。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈