Arjuna Aircraft Ident.: F-MBSD | J'ai écrit et réécrit mon code, de 25 façon différentes... Et y'a pas moyen, j'ai toujours le même problème.
J'ai une série de "ButtonLink", dont le "Click" lance "languageChange()".
Cet event handler crée une autre série de "ButtonLink", dont le "Click" lance "rubriqueChange".
Et là, y'a pas moyen, autant la première série de liens fonctionne, autant la seconde ne fonctionne pas.
Je bosse dans un Contrôle Utilisateur.
Dans la page, il n'y a que ce contrôle.
Voilà le code du contrôle :
Code :
- public class navigation : System.Web.UI.UserControl
- {
- protected System.Web.UI.HtmlControls.HtmlTableRow rowLanguage;
- protected System.Web.UI.HtmlControls.HtmlTableRow rowRubriques;
- protected System.Web.UI.HtmlControls.HtmlTable tablePages;
- protected System.Web.UI.HtmlControls.HtmlTableRow rowPages;
- private string lan;
- private void Page_Load(object sender, System.EventArgs e)
- {
- displayLanguages();
- }
- private void displayLanguages()
- {
- System.Data.DataTable dt;
- database db = new database();
- dt = db.getDataTable("select codlan, lannam from langueList() order by lannam", "lan" );
- foreach (System.Data.DataRow row in dt.Rows)
- {
- HtmlTableCell cellLanguage = new HtmlTableCell();
- LinkButton link = new LinkButton();
- link.ID = row[0].ToString();
- link.Text = row[1].ToString();
- link.Click += new EventHandler(languageChange);
- cellLanguage.Controls.Add(link);
- rowLanguage.Cells.Add(cellLanguage);
- }
- }
- private void displayRubriques()
- {
- System.Data.DataTable dt;
- database db = new database();
- rowRubriques.Controls.Clear();
- dt = db.getDataTable("select objnum, typobj, objlan, objnam from obj where objlan = '" + this.lan + "' and objpar is null and typpar is null and lanpar is null and objsta = 'V' and typobj != 'HPG' order by objnam", "lan" );
- foreach (System.Data.DataRow row in dt.Rows)
- {
- HtmlTableCell cellRubrique = new HtmlTableCell();
- LinkButton link = new LinkButton();
- link.ID = row[0].ToString() + "." + row[1].ToString() + "." + row[2].ToString();
- link.Text = row[3].ToString();
- link.Click += new EventHandler(rubriqueChange);
- cellRubrique.Controls.Add(link);
- rowRubriques.Cells.Add(cellRubrique);
- }
- }
- private void languageChange(object sender, EventArgs e)
- {
- _languageChange((LinkButton) sender);
- }
- private void _languageChange(LinkButton sender)
- {
- this.lan = sender.ID;
- foreach (HtmlTableCell cell in rowLanguage.Cells)
- {
- ((LinkButton) cell.Controls[0]).BackColor = System.Drawing.Color.Transparent;
- }
- sender.BackColor = System.Drawing.Color.Yellow;
- displayRubriques();
- }
- private void rubriqueChange(object sender, EventArgs e)
- {
- int a = 1;
- a = a / (a - a);
- _rubriqueChange((LinkButton) sender);
- }
- private void _rubriqueChange(LinkButton sender)
- {
- Label toto = new Label();
- toto.Text = "[" + this.lan + "]";
- Page.Controls.Add(toto);
- // _languageChange((LinkButton) rowLanguage.FindControl(lan));
- /*
- foreach (HtmlTableCell cell in rowRubriques.Cells)
- {
- ((LinkButton) cell.Controls[0]).BackColor = System.Drawing.Color.Transparent;
- }
- sender.BackColor = System.Drawing.Color.Yellow;
- */
- // displayRubriques(((LinkButton) sender).ID);
- }
- // Le bordel généré automatiquement par .NET
- }
|
Quand je clique sur une langue, j'ai bien la liste des rubriques correspondantes qui s'affiche.
Lorsque je clique sur une rubrique, la liste des rubrique disparaît, et rien ne se passe, je n'ai pas mon Label "toto" qui s'affiche. Encore mieu, le code de l'EventHandler "rubriqueChange" qui devrait planter avec une division par zéro (c'est fait exprès pour debug) ne plante pas. Il ne s'éxécute donc pas.
Le languageChange non plus ne s'execute pas.
Chose que je ne comprends d'ailleurs pas, c'est ça (code généré par l'appli) :
Code :
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
- <HTML>
- <HEAD>
- <title>NetCms Front Office</title>
- <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
- <meta name="CODE_LANGUAGE" Content="C#">
- <meta name="vs_defaultClientScript" content="JavaScript">
- <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
- </HEAD>
- <body MS_POSITIONING="GridLayout">
- <form name="Form1" method="post" action="default.aspx" id="Form1">
- <input type="hidden" name="__EVENTTARGET" value="" />
- <input type="hidden" name="__EVENTARGUMENT" value="" />
- <input type="hidden" name="__VIEWSTATE" value="dDw0MDQ3ODc1NjA7dDw7bDxpPDE+Oz47bDx0PDtsPGk8MT47PjtsPHQ8O2w8aTwx" />
- <script language="javascript">
- <!--
- function __doPostBack(eventTarget, eventArgument) {
- var theform;
- if (window.navigator.appName.toLowerCase().indexOf("netscape" ) > -1) {
- theform = document.forms["Form1"];
- }
- else {
- theform = document.Form1;
- }
- theform.__EVENTTARGET.value = eventTarget.split("$" ).join(":" );
- theform.__EVENTARGUMENT.value = eventArgument;
- theform.submit();
- }
- // -->
- </script>
- <table border="1">
- <tr id="mainNavigation_rowLanguage">
- <td><a id="mainNavigation_DEU" href="javascript:__doPostBack('mainNavigation$DEU','')" style="background-color:Transparent;">Allemand</a></td>
- <td><a id="mainNavigation_ENG" href="javascript:__doPostBack('mainNavigation$ENG','')" style="background-color:Transparent;">Anglais</a></td>
- <td><a id="mainNavigation_ESP" href="javascript:__doPostBack('mainNavigation$ESP','')" style="background-color:Transparent;">Espagnol</a></td>
- <td><a id="mainNavigation_FRA" href="javascript:__doPostBack('mainNavigation$FRA','')" style="background-color:Yellow;">Français</a></td>
- <td><a id="mainNavigation_ITA" href="javascript:__doPostBack('mainNavigation$ITA','')" style="background-color:Transparent;">Italien</a></td>
- <td><a id="mainNavigation_NED" href="javascript:__doPostBack('mainNavigation$NED','')" style="background-color:Transparent;">Néerlandais</a></td>
- </tr>
- </table>
- <table border="1">
- <tr id="mainNavigation_rowRubriques">
- <td><a id="mainNavigation_1.FAK.FRA" href="javascript:__doPostBack('mainNavigation$1.FAK.FRA','')">Infos groupe</a></td>
- <td><a id="mainNavigation_2.FAK.FRA" href="javascript:__doPostBack('mainNavigation$2.FAK.FRA','')">Une marque citoyenne</a></td>
- </tr>
- </table>
- <table id="mainNavigation_tablePages" border="1">
- <tr id="mainNavigation_rowPages">
- </tr>
- </table>
- </form>
- </body>
- </HTML>
|
=> Entre les deux séries de boutons (avec un EventHandler différent), il n'y a aucune différence dans l'appel du "doPostBack". Comment l'appli pourraît-elle savoir lequel utiliser de toute façon
Là, je sais plus quoi faire, ça me gonfle.
Le souci, c'est que cette appli, qui va faire le rendu d'un site 100% dynamique créé avec l'autre appli qui me pose déjà tant de soucis, est un peu très bordelique, et j'ai absolument besoin de passer par un système de ce genre pour gérer les menus (en fait, techniquement, il n'y a pas de différence entre les rubriques et les sous-rubriques. Mieu, même si une rubrique a des sous-rubriques, si elle n'est pas d'un type spécifique, je ne dois pas les afficher dans la nav. Enfin, c'est trop le bordel pour être géré de façon classique en QueryString (ou alors ça va être une usine à gaz encore pire) Message édité par Arjuna le 19-01-2005 à 17:50:49
|