AJout dynamique de controle AJAX TabPanel... [Résolu]

cs_ChristM
Messages postés
4
Date d'inscription
mardi 26 décembre 2000
Dernière intervention
7 novembre 2008
- 7 nov. 2008 à 12:31 - Dernière réponse : cs_ChristM
Messages postés
4
Date d'inscription
mardi 26 décembre 2000
Dernière intervention
7 novembre 2008
- 7 nov. 2008 à 15:23
Bonjour,
Une bonne âme pourrait elle  m'aider à résoudre ce petit problème SVP.
J’essaie désespérément d’ajouter dynamiquement un  contrôle Ajax TabPanel à un contrôle Ajax TabContainer.
Ce n’est pas l’ajout en lui-même qui me pose soucis mais plutôt le ReLoad de la page sur un PostBack :

J’ai une page ASPX avec un Control Ajax TabContainer dépourvu de tout TabPanel.
Dans cette même page j’ai aussi 2 Contrôles Button.
Le premier Button  ajoute un TabPanel au TabContainer sur son event Click. Juque la tout est Ok.
Le second bouton n’a aucun code, il est juste la pour déclencher une PostBack ; Et c’est la que ca merde ; En effet, sur le Page_Load de la page ASPX je recréé le TabPanel  et la j’ai une exception :




L'argument spécifié n'était pas dans les limites de la plage des valeurs valides.
Nom du paramètre : value


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






Voici mon code (je développe sous VS 2008 en C# sur framework ASP.NET 3.5)

Code de la page ASPX :
<form
id="form1"
runat="server">

<div>

<asp:ScriptManager
ID="ScriptManager1"
runat="server">
</asp:ScriptManager>
<cc1:TabContainer
ID="_ajxTabContainer"
runat="server">
</cc1:TabContainer>
<br
/>
<asp:Button
ID="Button1"
runat="server"
onclick="Button1_Click"
Text="Add Tab"
/>
<asp:Button
ID="Button2"
runat="server"
onclick="Button2_Click"
Text="Postback"
/>
</div>
</form>

CodeBehind associé :
protected
void Page_Init(
object sender,
EventArgs e)
{ }

protected
void Page_Load(
object sender,
EventArgs e)
{

   if (Page.IsPostBack)
   {

      if (Session[
"Tabs"] !=
null)
      {

         TabPanelCollection lTabs = (
TabPanelCollection)Session[
"Tabs"];

         foreach (
TabPanel tp
in lTabs)
            _ajxTabContainer.Tabs.Add(tp);

         _ajxTabContainer.ActiveTab = _ajxTabContainer.Tabs[0];
      }
   }
}

protected
void Button1_Click(
object sender,
EventArgs e)
{
System.Web.UI.HtmlControls.
HtmlGenericControl lTPContent =
new System.Web.UI.HtmlControls.
HtmlGenericControl();

Control lCtrl =
new
LiteralControl(
"
Yes it's green !
");
lTPContent.Controls.Add(lCtrl);

AjaxControlToolkit.
TabPanel lTabPan =
new AjaxControlToolkit.
TabPanel();
lTabPan.HeaderText =
"Dynamic TP Green";
lTabPan.Controls.Add(lTPContent);

_ajxTabContainer.Tabs.Add(lTabPan);
_ajxTabContainer.ActiveTab = lTabPan;Session[

"Tabs"] = _ajxTabContainer.Tabs;
}

protected
void Button2_Click(
object sender,
EventArgs e){}

Merci.
Christ.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
nhervagault
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
- 7 nov. 2008 à 13:32
3
Merci
Salut,

Regardes ce post
Le control tabpanel est un controle qui est assez bizarre d'utilisation et même légèrement buggé.
Du moins, il n'est pas totalement opérationnel et finit
(pas de designer, souvent obligé de passer par du javascript)
mais il est bien pratique pour faire des site Web.

Bon coding

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de nhervagault
Meilleure réponse
cs_ChristM
Messages postés
4
Date d'inscription
mardi 26 décembre 2000
Dernière intervention
7 novembre 2008
- 7 nov. 2008 à 15:23
3
Merci
Arf, en fait, il ne faut essayer au PostBack d'ajouter les TabPanel  créés par le bouton; Il faut les ReCréer entièrement; J'ai supprimé le code de mon PageLoad, je l'ai légèrement modifié et je le place dans l'override de du OnInit :

protected

override
void OnInit(EventArgs e)
{
   base.OnInit(e);
   
   if (Session["Tabs"] != null)
   {
      TabPanelCollection lTabs = (TabPanelCollection)Session["Tabs"];
      foreach (TabPanel tp in lTabs)
      {
         TabPanel lTabPan = newTabPanel();
         lTabPan.HeaderText = tp.HeaderText;
         lTabPan.Controls.Add(tp.Controls[0]);
         _ajxTabContainer.Tabs.Add(lTabPan);
      }
      _ajxTabContainer.ActiveTab = _ajxTabContainer.Tabs[0];
   }
}protected
void Page_Init(object sender, EventArgs e) { }

protected
void Page_Load(object sender, EventArgs e) { }

protected
void Button1_Click(object sender, EventArgs e)
{
System.Web.UI.HtmlControls.HtmlGenericControl lTPContent = new System.Web.UI.HtmlControls.HtmlGenericControl();
Control lCtrl = newLiteralControl("
Yes it's green !
");
lTPContent.Controls.Add(lCtrl);

AjaxControlToolkit.TabPanel lTabPan = new AjaxControlToolkit.TabPanel();
lTabPan.HeaderText = "Dynamic TP Green";
lTabPan.Controls.Add(lTPContent);

_ajxTabContainer.Tabs.Add(lTabPan);
_ajxTabContainer.ActiveTab = lTabPan;

Session["Tabs"
] = _ajxTabContainer.Tabs;
}

protected
void Button2_Click(object sender, EventArgs e) { }

Merci nhervagault parceque tout comptre fait, la relecture de post que tu m'indiquais, m'a ouvert les yeux.

Maisj'avoue, même si maintenant ca fonctionne, que j'aimerai bien comprendre le pourquoi du comment !

Merci cs_ChristM 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de cs_ChristM
cs_ChristM
Messages postés
4
Date d'inscription
mardi 26 décembre 2000
Dernière intervention
7 novembre 2008
- 7 nov. 2008 à 14:35
0
Merci
Merci pour ta réponse, mais le post que tu m'indique ne résoud pas vraiment mon probleme... effectivement la création de TabControl dans le PageLoad ne pose pas de soucis, c'est sur le Click d'un bouton que ca merde un peu

Mais merci tout de meme.
Christ.
Commenter la réponse de cs_ChristM
cs_ChristM
Messages postés
4
Date d'inscription
mardi 26 décembre 2000
Dernière intervention
7 novembre 2008
- 7 nov. 2008 à 14:50
0
Merci
Petite précision, si je recréé dans le OnInit (override)  le TabPanel ajouté par le Click de mon Button,
au PostBack j'ai une nouvelle exception :
Les contrôles de script ne peuvent pas être inscrits après PreRender.
Commenter la réponse de cs_ChristM

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.