[C# / ASP.NET] Event "Click" qui fonctionne pas

Event "Click" qui fonctionne pas [C# / ASP.NET] - C#/.NET managed - Programmation

Marsh Posté le 19-01-2005 à 17:45:37    

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 :
  1. public class navigation : System.Web.UI.UserControl
  2. {
  3.  protected System.Web.UI.HtmlControls.HtmlTableRow rowLanguage;
  4.  protected System.Web.UI.HtmlControls.HtmlTableRow rowRubriques;
  5.  protected System.Web.UI.HtmlControls.HtmlTable tablePages;
  6.  protected System.Web.UI.HtmlControls.HtmlTableRow rowPages;
  7.  private string lan;
  8.  private void Page_Load(object sender, System.EventArgs e)
  9.  {
  10.   displayLanguages();
  11.  }
  12.  private void displayLanguages()
  13.  {
  14.   System.Data.DataTable dt;
  15.   database db = new database();
  16.   dt = db.getDataTable("select codlan, lannam from langueList() order by lannam", "lan" );
  17.   foreach (System.Data.DataRow row in dt.Rows)
  18.   {
  19.    HtmlTableCell cellLanguage = new HtmlTableCell();
  20.    LinkButton link = new LinkButton();
  21.    link.ID = row[0].ToString();
  22.    link.Text = row[1].ToString();
  23.    link.Click += new EventHandler(languageChange);
  24.    cellLanguage.Controls.Add(link);
  25.    rowLanguage.Cells.Add(cellLanguage);
  26.   }
  27.  }
  28.  private void displayRubriques()
  29.  {
  30.   System.Data.DataTable dt;
  31.   database db = new database();
  32.   rowRubriques.Controls.Clear();
  33.   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" );
  34.   foreach (System.Data.DataRow row in dt.Rows)
  35.   {
  36.    HtmlTableCell cellRubrique = new HtmlTableCell();
  37.    LinkButton link = new LinkButton();
  38.    link.ID = row[0].ToString() + "." + row[1].ToString() + "." + row[2].ToString();
  39.    link.Text = row[3].ToString();
  40.    link.Click += new EventHandler(rubriqueChange);
  41.    cellRubrique.Controls.Add(link);
  42.    rowRubriques.Cells.Add(cellRubrique);
  43.   }
  44.  }
  45.  private void languageChange(object sender, EventArgs e)
  46.  {
  47.   _languageChange((LinkButton) sender);
  48.  }
  49.  private void _languageChange(LinkButton sender)
  50.  {
  51.   this.lan = sender.ID;
  52.   foreach (HtmlTableCell cell in rowLanguage.Cells)
  53.   {
  54.    ((LinkButton) cell.Controls[0]).BackColor = System.Drawing.Color.Transparent;
  55.   }
  56.   sender.BackColor = System.Drawing.Color.Yellow;
  57.   displayRubriques();
  58.  }
  59.  private void rubriqueChange(object sender, EventArgs e)
  60.  {
  61.   int a = 1;
  62.   a = a / (a - a);
  63.   _rubriqueChange((LinkButton) sender);
  64.  }
  65.  private void _rubriqueChange(LinkButton sender)
  66.  {
  67.   Label toto = new Label();
  68.   toto.Text = "[" + this.lan + "]";
  69.   Page.Controls.Add(toto);
  70. //   _languageChange((LinkButton) rowLanguage.FindControl(lan));
  71. /*
  72.   foreach (HtmlTableCell cell in rowRubriques.Cells)
  73.   {
  74.    ((LinkButton) cell.Controls[0]).BackColor = System.Drawing.Color.Transparent;
  75.   }
  76.   sender.BackColor = System.Drawing.Color.Yellow;
  77. */
  78.   //   displayRubriques(((LinkButton) sender).ID);
  79.  }
  80.  // Le bordel généré automatiquement par .NET
  81. }


 
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 :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  2. <HTML>
  3. <HEAD>
  4.  <title>NetCms Front Office</title>
  5.  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  6.  <meta name="CODE_LANGUAGE" Content="C#">
  7.  <meta name="vs_defaultClientScript" content="JavaScript">
  8.  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  9. </HEAD>
  10. <body MS_POSITIONING="GridLayout">
  11.  <form name="Form1" method="post" action="default.aspx" id="Form1">
  12. <input type="hidden" name="__EVENTTARGET" value="" />
  13. <input type="hidden" name="__EVENTARGUMENT" value="" />
  14. <input type="hidden" name="__VIEWSTATE" value="dDw0MDQ3ODc1NjA7dDw7bDxpPDE+Oz47bDx0PDtsPGk8MT47PjtsPHQ8O2w8aTwx" />
  15. <script language="javascript">
  16. <!--
  17. function __doPostBack(eventTarget, eventArgument) {
  18.  var theform;
  19.  if (window.navigator.appName.toLowerCase().indexOf("netscape" ) > -1) {
  20.   theform = document.forms["Form1"];
  21.  }
  22.  else {
  23.   theform = document.Form1;
  24.  }
  25.  theform.__EVENTTARGET.value = eventTarget.split("$" ).join(":" );
  26.  theform.__EVENTARGUMENT.value = eventArgument;
  27.  theform.submit();
  28. }
  29. // -->
  30. </script>
  31. <table border="1">
  32. <tr id="mainNavigation_rowLanguage">
  33. <td><a id="mainNavigation_DEU" href="javascript:__doPostBack('mainNavigation$DEU','')" style="background-color:Transparent;">Allemand</a></td>
  34. <td><a id="mainNavigation_ENG" href="javascript:__doPostBack('mainNavigation$ENG','')" style="background-color:Transparent;">Anglais</a></td>
  35. <td><a id="mainNavigation_ESP" href="javascript:__doPostBack('mainNavigation$ESP','')" style="background-color:Transparent;">Espagnol</a></td>
  36. <td><a id="mainNavigation_FRA" href="javascript:__doPostBack('mainNavigation$FRA','')" style="background-color:Yellow;">Français</a></td>
  37. <td><a id="mainNavigation_ITA" href="javascript:__doPostBack('mainNavigation$ITA','')" style="background-color:Transparent;">Italien</a></td>
  38. <td><a id="mainNavigation_NED" href="javascript:__doPostBack('mainNavigation$NED','')" style="background-color:Transparent;">Néerlandais</a></td>
  39. </tr>
  40. </table>
  41. <table border="1">
  42. <tr id="mainNavigation_rowRubriques">
  43. <td><a id="mainNavigation_1.FAK.FRA" href="javascript:__doPostBack('mainNavigation$1.FAK.FRA','')">Infos groupe</a></td>
  44. <td><a id="mainNavigation_2.FAK.FRA" href="javascript:__doPostBack('mainNavigation$2.FAK.FRA','')">Une marque citoyenne</a></td>
  45. </tr>
  46. </table>
  47. <table id="mainNavigation_tablePages" border="1">
  48. <tr id="mainNavigation_rowPages">
  49. </tr>
  50. </table>
  51.  </form>
  52. </body>
  53. </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
Reply

Marsh Posté le 19-01-2005 à 17:45:37   

Reply

Marsh Posté le 19-01-2005 à 17:46:53    

la mise en page est un peu fouillie [:zaib3k]
tu pourrais retapisser tout ca ?

Reply

Marsh Posté le 19-01-2005 à 17:47:43    

de quoi :??:

Reply

Marsh Posté le 19-01-2005 à 17:48:28    

heuh bin j'ai un peu un ascenceur horizontal de 4mm de long, c'est relou


Message édité par chrisbk le 19-01-2005 à 17:48:37
Reply

Marsh Posté le 19-01-2005 à 17:50:08    

Ben j'y peut rien, c'est la chaîne du viewstate :p
 
Bon, je la raccourci ;)

Reply

Marsh Posté le 19-01-2005 à 17:51:08    

y'a aussi le  
dt = db.getDataTable("select objnum, typobj, objlan, objnam from obj where....
 
si tu pourrais filer des coups de hache la dedans
 
edit : j'ai rien dit, ca roule


Message édité par chrisbk le 19-01-2005 à 17:51:21
Reply

Marsh Posté le 19-01-2005 à 17:52:46    

t'as pas setter le "onClick" de ton nouveau boutoon, j'ai l'impression, c normal ?
 
un truc genre :  
 
 

Code :
  1. link.Click += new EventHandler(languageChange);


mais pour ton 'toto'


Message édité par chrisbk le 19-01-2005 à 17:53:32
Reply

Marsh Posté le 19-01-2005 à 17:53:56    

Ben si :

Code :
  1. link.Click += new EventHandler(rubriqueChange);


 
(y'a pas de onClick)


Message édité par Arjuna le 19-01-2005 à 17:54:20
Reply

Marsh Posté le 19-01-2005 à 17:54:52    

bin vi mais ton nouveau bouton, c'est toto, pas link ?
 
mince jme suis perdu dans tes languagechange et rubriquechange


Message édité par chrisbk le 19-01-2005 à 17:55:55
Reply

Marsh Posté le 19-01-2005 à 17:55:34    

chrisbk a écrit :

t'as pas setter le "onClick" de ton nouveau boutoon, j'ai l'impression, c normal ?
 
un truc genre :  
 
 

Code :
  1. link.Click += new EventHandler(languageChange);


mais pour ton 'toto'


Ben toto c'est pas un bouton, c'est un bout de texte qui devrait apparaître quand je clique sur une rubrique.
Mais là, quand je clique, les rubriques disparaissent, et j'ai plus que les langues, et pas de toto. Comme si je venais d'arriver sur la page en fait.

Reply

Marsh Posté le 19-01-2005 à 17:55:34   

Reply

Marsh Posté le 19-01-2005 à 17:56:45    

C'est celui-là qui marche pas : (displayRubriques())

Code :
  1. link.Click += new EventHandler(rubriqueChange);


Pas celui-là : (displayLanguages())

Code :
  1. link.Click += new EventHandler(languageChange);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed