Ajax选项卡控件中的选项卡更改事件

问题描述:

我在其中一个页面中使用了Ajax选项卡控件。它有一个主控用户控制,其中有三个选项卡。 这三个选项卡已由三个单独的用户控件填充。 这些用户控件有一些控件和一个保存按钮来保存数据。 我的问题是,如果用户在当前选项卡的用户控件中有任何未保存的更改,我必须阻止用户从选项卡导航。我不得不问他有没有未保存的变化,你想保存它们吗?并根据用户的反应必须采取进一步行动。 我可以使用TabControl的OnClientActiveTabChanged事件打开Pop并询问未保存的更改。我在确切知道哪个标签的数据未保存时面临问题。我无法追踪当前标签,从哪个用户试图导航离开。任何人都可以帮助我保持当前标签的名称,以便每当用户点击任何其他标签时,我将知道哪个标签的数据我必须保存并且可以从我的主用户控件中激发相应用户控件的保存功能。Ajax选项卡控件中的选项卡更改事件

请找到下面的代码样本相同:

<%@ 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> 

试一试在你的tabchanged javascript函数

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

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

ps:我还没有测试过这个解决方案,但是应该可以工作

+0

感谢您的决议,但仍然没有运气.. 我试过了。 PFb功能: 函数checkUnsavedChanges(){ 调试器; var container = document.getElementById(“”); var container1 = $ find(“”); var container2 = $ find('TabContainer1'); var activeTab =容器。get_activeTabIndex();警报(容器); 警报(容器); alert(container1); alert(container2); } 没有结果出警报 – Chat

+0

你试过alert(container.toString());或警报(JSON.stringify(容器));或alert(activeTab.toString());也许如果我在周末有一些时间,我会自己尝试一下,我现在正在工作:p – BBQ

+0

是的,没问题。将尝试与.ToString()。将给它一些更多的尝试我的结局以及.. – Chat

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

我发现,使用多视图与更新面板和一个小图形genious使它看起来像一个选项卡,可以使一个可以点击链接按钮的选项卡控件,因此您可以按照这种方式设置会话....设置onclick并在加载完成时检索。

EX: Session("whichTab") = myTabControl.activetabindex on click and whatever = Session("whichTab") on load complete for curent page。

注:我做这一切的背后

VB.net代码这会告诉你,当用户更改标签哪一个是他或她以前在。当然,你必须找到为你的应用程序执行此操作的最佳方法,并查看标签控件选项卡如何似乎没有服务器侧单击事件,而是使用多视图。如果有人可以纠正我的点击事件请做。虽然我刚开始使用它,但我并没有真正看过控制器的规格,而是我如何到达这里。

希望这会有所帮助。

+0

这是一个很棒的解决方案。你介意分享一些代码吗?我很高兴看到/听到关于本地语言的解决方案,而不是插入,敲击或使用java脚本或jquery或其他东西来解决在本地语言中可以做什么。 BIG投票。我知道有时候需要其他的语言,在少数情况下会让一些事情变得更容易。但我总是试图留在本地语言。 – htm11h