Событие изменения вкладки в элементе управления Ajax Tab - PullRequest
1 голос
/ 06 октября 2011

Я использовал Ajax Tab Control на одной из моих страниц. Он имеет основной пользовательский элемент управления с тремя вкладками. Эти три вкладки были заполнены тремя отдельными пользовательскими элементами управления. Эти пользовательские элементы управления имеют некоторые элементы управления и кнопку сохранения для сохранения данных. Моя проблема в том, что я должен запретить пользователю переходить от вкладки, если у него есть несохраненные изменения в текущих вкладках Пользовательский контроль. Я должен спросить его во всплывающем окне, что у вас есть несохраненные изменения, хотите ли вы их сохранить И согласно ответу пользователя необходимо следить за дальнейшими действиями. Я могу открыть всплывающее окно и спросить о несохраненных изменениях, используя событие OnClientActiveTabChanged TabControl. Я столкнулся с проблемой, зная точно, какие данные вкладки не сохранены. Я не могу отследить текущую вкладку, с которой пользователь пытается отойти должен сохранить и может активировать функцию сохранения соответствующего пользовательского элемента управления из моего основного элемента управления.

Ниже приведен пример кода для того же:

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

2 голосов
/ 15 октября 2012

Мне кажется, что если бы вы могли получить текущий активный индекс вкладки и сохранить его в сеансе, это должно сработать.Это то, что я делаю для событий multiview activeviewindex и т. Д. Onclick для элементов управления asp.net.Я получаю значения на событии загрузки страницы, чтобы сохранить текущее представление пользователей при обновлении и т. Д.

Я обнаружил, что при использовании многовидового просмотра с панелью обновления и небольшим графическим изображением, чтобы он выглядел как вкладка, выМожно создать элемент управления вкладкой, который может иметь интерактивные кнопки ссылки, чтобы вы могли установить сессию таким образом .... установить onclick и получить при завершении загрузки.

EX: Session("whichTab") = myTabControl.activetabindex при нажатии и whatever = Session("whichTab") при завершении загрузки для текущей страницы.

ПРИМЕЧАНИЕ. Я делаю все это в коде VB.net, стоящем за

этимсообщит вам, когда пользователь меняет вкладки, на какой из них он был ранее.Естественно, вы должны найти лучший способ сделать это для своего приложения и увидеть, что вкладки управления вкладками не имеют события щелчка на стороне сервера, вместо этого я делаю многовидовой просмотр.Если кто-то может исправить меня в событии клика, пожалуйста, сделайте.Я на самом деле не смотрел спецификации для элемента управления, хотя я только начал его использовать и вот как я сюда попал.

Надеюсь, это поможет.

2 голосов
/ 06 октября 2011

Попробуйте это в вашей функции javascript с табличным кодом

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

Я не знаю пути без jquery, но зачем использовать javascript без jquery? :) 1004 *

ps: у меня нетпротестировал это решение, но оно должно работать

...