2010-11-02 5 views
0

J'ai trois onglets. Je veux charger ensuite sur demande sauf le premier onglet. Si je clique sur le 2ème onglet, il va charger le second onglet. Mon problème est Si je charge le 2ème onglet et aller au 3ème onglet et quand je reviens au 2ème onglet il se charge à nouveau. Cela ne devrait pas arriver. Une fois l'onglet chargé, il ne doit plus être chargé. Comment y parvenir? voici mon exemple de code ....Charger les onglets Ajax sur demande

<cc1:TabContainer ID="tabEditTskContainer" OnActiveTabChanged="tabEditTskContainer_TabChanged" 
OnClientActiveTabChanged="tabChanged" AutoPostBack="true" runat="server" Height="300px" 
Width="100%" ActiveTabIndex="0"> 
<cc1:TabPanel runat="server" ID="tabEditTskPnl" Enabled="true" HeaderText="Current Balance History" 
    Width="99%"> 
    <HeaderTemplate> 
     Edit Task 
    </HeaderTemplate> 
    <ContentTemplate> 
     <br /> 
    </ContentTemplate> 
</cc1:TabPanel> 
<cc1:TabPanel ID="tabAttach" runat="server" Height="100%" Enabled="true" Width="99%"> 
    <HeaderTemplate> 
     Attachments 
    </HeaderTemplate> 
    <ContentTemplate> 
    </ContentTemplate> 
</cc1:TabPanel> 
<cc1:TabPanel ID="tabAddNotes" Height="100%" runat="server" Enabled="true" Width="99%"> 
    <HeaderTemplate> 
     Notes 
    </HeaderTemplate> 
    <ContentTemplate> 
    </ContentTemplate> 
</cc1:TabPanel> 

<input type="hidden" runat="server" id="hdnTabAttach" /> 
     <input type="hidden" runat="server" id="hdntabAddNotes" /> 


function tabChanged(sender, args) { 
     var tabIndex = sender.get_activeTabIndex(); 
     if (tabIndex == "1") { 
      if (document.getElementById('hdnTabAttach').value == "0") { 
       return true; 
      } 
      else 
       return false; 
     } 
    } 


protected void tabEditTskContainer_TabChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     int intTabIndex = tabEditTskContainer.ActiveTabIndex; 

     if (intTabIndex == 1 && hdnTabAttach.Value != "1") 
     { 
      hdnTabAttach.Value = "1"; 
     } 

     if (intTabIndex == 2) 
     { 

      DBLayer obj = new DBLayer(); 
      SqlCommand cmd = new SqlCommand(); 
      SqlParameter param = new SqlParameter("@fOrderID", SqlDbType.NVarChar, 255); 
      param.Value = Session["selorderID"].ToString(); 
      param.Direction = ParameterDirection.Input; 
      cmd.Parameters.Add(param); 
      param = new SqlParameter("@fncatid", SqlDbType.NVarChar, 25); 
      param.Value = "1"; 
      param.Direction = ParameterDirection.Input; 
      cmd.Parameters.Add(param); 
      DataSet dsGetNotes = obj.ExecuteDatasetSql("[usp_GetNotes]", cmd); 
      Session["GvNotes"] = dsGetNotes; 
      gvNotes.DataSource = dsGetNotes; 
      gvNotes.DataBind(); 

     } 

    } 
    catch (Exception ex) 
    { 

    } 

} 

Répondre

0

rapide et facile - ajouter un champ de formulaire caché à votre page ASPX et ajoutez le nom de l'onglet à sa valeur. Ensuite, avant de charger un onglet, assurez-vous que cette valeur n'est pas incluse dans la valeur des champs de formulaire masqués.

Je crois que cela devrait fonctionner, mais le problème est que vous utilisez le truc ajax intégré de .Net, que je trouve difficile à contourner. Normalement, côté client, je créerais une variable globale qui me dirait quels onglets ont été chargés, et ne chargerait un onglet que si cela n'avait pas été fait auparavant, sinon, je montrerais simplement l'onglet déjà chargé.