Ajax Tab控件中的Tab更改事件

时间:2011-10-06 07:45:48

标签: asp.net ajax postback

我在其中一个页面中使用过Ajax Tab Control。它有一个主用户控件,里面有三个选项卡。 这三个选项卡已由三个单独的用户控件填充。 这些用户控件有一些控件和一个保存按钮来保存数据。 我的问题是,如果用户在当前标签用户控件中有任何未保存的更改,我必须阻止用户从标签导航。我必须在弹出窗口中询问他有未保存的更改,是否要保存它们。并且根据用户的反应必须跟进进一步的行动。 我可以打开弹出窗口并使用TabControl的OnClientActiveTabChanged事件询问未保存的更改。我在确切知道哪个标签的数据未保存时遇到问题。我无法追踪用户试图离开的当前选项卡。任何人都可以帮助我一直保持当前选项卡的名称,这样每当用户点击任何其他选项卡时,我就会知道哪个选项卡的数据我必须保存并可以从我的主用户控件中激活相应用户控件的保存功能。

请在下面找到相同的代码示例:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MasterUserControl.ascx.cs"
    Inherits="TabbedSolution.MasterUserControl" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<%@ Register Src="UserControl1.ascx" TagName="UserControl1" TagPrefix="uc1" %>
<%@ Register Src="UserControl2.ascx" TagName="UserControl2" TagPrefix="uc2" %>
<%@ Register Src="UserControl3.ascx" TagName="UserControl3" TagPrefix="uc3" %>
<div>
    <asp:TabContainer ID="TabContainer1" runat="server" 
    AutoPostBack="true" OnClientActiveTabChanged="chechUnsavedChanges" OnActiveTabChanged="tabChanged">
        <asp:TabPanel ID="TabPanel1" runat="server" HeaderText="Panel1" >
            <ContentTemplate>
                <uc1:UserControl1 ID="UserControl11" runat="server" />
            </ContentTemplate>
        </asp:TabPanel>
        <asp:TabPanel ID="TabPanel2" runat="server" HeaderText="Panel2">
            <ContentTemplate>
                <uc2:UserControl2 ID="UserControl21" runat="server" />
            </ContentTemplate>
        </asp:TabPanel>
        <asp:TabPanel ID="TabPanel3" runat="server" HeaderText="Panel3">
            <ContentTemplate>
                <uc3:UserControl3 ID="UserControl31" runat="server" />
            </ContentTemplate>
        </asp:TabPanel>
    </asp:TabContainer>
</div>

2 个答案:

答案 0 :(得分:2)

在tabchanged javascript函数中试试这个

var container = $find('TabContainer1');
var activeTab = container.get_activeTabIndex(); 

我不知道没有jquery的方式,但为什么使用javascript而不用jquery呵呵:)

ps:我还没有测试过这个解决方案,但它应该可以运行

答案 1 :(得分:2)

在我看来,如果你能获得当前的活动标签索引并将其存储在会话中,那应该可行。这就是我为多视图activeviewindex等所做的onclick事件的asp.net控件。我在页面加载完成事件中获取值以在刷新等时保存用户当前视图。

我发现使用带有更新面板的多视图和一个小图形显示使它看起来像一个标签,你可以创建一个可以点击链接按钮的标签控件,这样你就可以这样设置会话...设置onclick并在加载完成后检索。

EX: 点击Session("whichTab") = myTabControl.activetabindex 对于curent页面,whatever = Session("whichTab")加载完成。

注意:我在VB.net代码中执行所有这些操作

这将告诉您何时用户更改了他或她之前所处的标签。当然,您必须找到为您的应用程序执行此操作的最佳方法,并查看选项卡控件选项卡似乎没有服务器端单击事件,我会执行多视图。如果有人可以通过点击事件纠正我,请执行。虽然我刚刚开始使用它,但我还没有真正查看控件的规格,而是我如何到达这里。

希望这有帮助。