<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de lutecefalco</title>
	<atom:link href="https://blog.developpez.com/lutecefalco/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/lutecefalco</link>
	<description></description>
	<lastBuildDate>Sun, 23 Nov 2008 22:24:08 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>[ASP.NET] Créer une ComboBox avec l&#8217;aide de l&#8217;AJAX Control Toolkit</title>
		<link>https://blog.developpez.com/lutecefalco/p6783/asp-net/asp_net_creer_une_combobox_avec_l_aide_d</link>
		<comments>https://blog.developpez.com/lutecefalco/p6783/asp-net/asp_net_creer_une_combobox_avec_l_aide_d#comments</comments>
		<pubDate>Sun, 23 Nov 2008 22:22:09 +0000</pubDate>
		<dc:creator><![CDATA[lutecefalco]]></dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai récemment eu besoin de remplacer une liste déroulante par une ComboBox dans l&#8217;une de mes applis web. Pour rappel, une ComboBox est une liste déroulante qui offre également la possibilité de saisir le texte de son choix (une liste déroulante ne permet que de sélectionner l&#8217;un de ses items). Ma liste déroulante proposait une série de nombres compris entre 1 et 1000 avec un pas qui augmentait régulièrement (pas de 1 entre 0 et [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai récemment eu besoin de remplacer une liste déroulante par une ComboBox dans l&rsquo;une de mes applis web.<br />
Pour rappel, une ComboBox est une liste déroulante qui offre également la possibilité de saisir le texte de son choix (une liste déroulante ne permet que de sélectionner l&rsquo;un de ses items).</p>
<p>Ma liste déroulante proposait une série de nombres compris entre 1 et 1000 avec un pas qui augmentait régulièrement (pas de 1 entre 0 et 100, pas de 10 entre 100 et 500 et pas de 25 entre 500 et 1000). Il fallait offrir à l&rsquo;utilisateur la possibilité de saisir une valeur non existante dans la liste déroulante (108 par exemple).</p>
<p>Après quelques recherches sur internet, je n&rsquo;avais trouvé que des composants payants ou qui ne fonctionnaient pas vraiment. En regardant du côté de l&rsquo;AJAX Control Toolkit, je suis tombé sur le DropDownExtender (<a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/DropDown/DropDown.aspx">démo</a>). Je me suis dit que ça pouvait faire l&rsquo;affaire et je suis parti dans cette direction.</p>
<p><span id="more-2"></span></p>
<p>Le principe du DropDownExtender est d&rsquo;afficher un contrôle lors du clic le contrôle qu&rsquo;étend le DropDownExtender.<br />
Pour réaliser une ComboBox, on va utiliser une TextBox que l&rsquo;on va étendre avec le DropDownExtender et on va faire afficher un Panel. Ce panel contiendra les différents items initialement contenus dans la liste déroulante. Afin de remplir la TextBox avec la valeur de l&rsquo;item sélectionné dans le Panel, chaque item se présentera sous la forme d&rsquo;un lien et on appellera une fonction javascript sur le onclick pour remplir la TextBox.</p>
<p>Définition de la TextBox, du DropDownExtender et du Panel:<br />
<font color="green">&lt;!&#8211; La TextBox &#8211;&gt; </font><br />
<font color="blue">&lt;</font><font color="#A31515">asp</font><font color="blue">:</font><font color="#a31515">TextBox </font><font color="red">ID</font>=<font color="blue">&laquo;&nbsp;tbSpread&nbsp;&raquo;</font> <font color="red">runat</font>=<font color="blue">&laquo;&nbsp;server&nbsp;&raquo;</font> <font color="red">Width</font>=<font color="blue">&laquo;&nbsp;143px&nbsp;&raquo;&gt;</font>0<font color="blue">&lt;/</font><font color="#A31515">asp</font>:<font color="#A31515">TextBox</font><font color="blue">&gt;</font><br />
<font color="green">&lt;!&#8211; Le DropDownExtender &#8211;&gt;</font><br />
<font color="blue">&lt;</font><font color="#A31515">act</font><font color="blue">:</font><font color="#A31515">DropDownExtender  </font><br />
  <font color="red">  ID</font><font color="blue">=&nbsp;&raquo;ddeSpread&nbsp;&raquo;</font><br />
  <font color="red">  runat</font><font color="blue">=&nbsp;&raquo;server&nbsp;&raquo;</font><br />
  <font color="red">  TargetControlID</font><font color="blue">=&nbsp;&raquo;tbSpread&nbsp;&raquo;</font><br />
  <font color="red">  DropDownControlID</font><font color="blue">=&nbsp;&raquo;pnlSpread&nbsp;&raquo;</font><br />
  <font color="red">  HighlightBackColor</font><font color="blue">=&nbsp;&raquo;white&nbsp;&raquo;&gt; </font><br />
<font color="blue">&lt;/</font><font color="#A31515">act</font><font color="blue">:</font><font color="#A31515">DropDownExtender</font><font color="blue">&gt;</font><br />
<font color="green">&lt;!&#8211; Le Panel &#8211;&gt;</font><br />
<font color="blue">&lt;</font><font color="#A31515">asp</font><font color="blue">:</font><font color="#A31515">Panel  </font><br />
  <font color="red">  ID</font><font color="blue">=&nbsp;&raquo;pnlSpread&nbsp;&raquo;</font><br />
  <font color="red">  runat</font><font color="blue">=&nbsp;&raquo;server&nbsp;&raquo;</font><br />
  <font color="red">  Height</font><font color="blue">=&nbsp;&raquo;200px&nbsp;&raquo;</font><br />
  <font color="red">  ScrollBars</font><font color="blue">=&nbsp;&raquo;Vertical&nbsp;&raquo;</font><br />
  <font color="red">  CssClass</font><font color="blue">=&nbsp;&raquo;ContextMenuPanel&nbsp;&raquo;</font><br />
  <font color="red">  style</font><font color="blue">=&nbsp;&raquo;</font><font color="red">display</font><font color="blue">: none;</font> <font color="red">visibility</font><font color="blue">: hidden;&nbsp;&raquo;&gt;</font><br />
    <font color="blue">&lt;</font><font color="#A31515">asp</font><font color="blue">:</font><font color="#A31515">Literal </font><font color="red">ID</font><font color="blue">=&nbsp;&raquo;ltSpread&nbsp;&raquo;</font> <font color="red">runat</font><font color="blue">=&nbsp;&raquo;server&nbsp;&raquo;</font> <font color="red">EnableViewState</font><font color="blue">=&nbsp;&raquo;false&nbsp;&raquo;&gt;</font><br />
    <font color="blue">&lt;/</font><font color="#A31515">asp</font><font color="blue">:</font><font color="#A31515">Literal</font><font color="blue">&gt;</font><br />
<font color="blue">&lt;/</font><font color="#A31515">asp</font><font color="blue">:</font><font color="#A31515">Panel</font><font color="blue">&gt; </font></p>
<p>Concernant la TextBox, rien à dire.<br />
Concernant le DropDowExtender:<br />
 &#8211; TargetControlID indique quel contrôle étendre, c&rsquo;est-à-dire quel est le contrôle sur lequel un clic entrainera l&rsquo;affichage d&rsquo;un autre contrôle.<br />
 &#8211; DropDownControlID correspond à l&rsquo;ID du contrôle qui sera affiché<br />
Concernant le panel, il contient un Literal qui contiendra les liens correspondants aux items à afficher.</p>
<p>Remplissage du panel (code behind):<br />
&#160;&#160;&#160;<font color="#0000ff">private void</font> FillPanel()<br />
  &#160;&#160;&#160;{<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">var</font> sb = new <font color="#00aeae">StringBuilder</font>();<br />
  <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#008000">// Pas = 1 entre 0 &#224; 100.</font>&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">for</font> (<font color="#0000ff">var</font> i = 0; i &lt; 101; i++)<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; sb.AppendFormat(GenerateLink(i));<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#008000">// Pas = 10 entre 100 et 500.</font>&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">for</font> (<font color="#0000ff">var</font> i = 110; i &lt; 501; i += 10)<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; sb.AppendFormat(GenerateLink(i));<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#008000">// Pas = 25 entre 500 et 1000.</font><br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">for</font> (<font color="#0000ff">var</font> i = 525; i &lt; 1001; i += 25)<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; sb.AppendFormat(GenerateLink(i));<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; ltSpread.Text = sb.ToString();<br />
  &#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160; <font color="#0000ff">private string</font> GenerateLink(<font color="#0000ff">int</font> i)<br />
  &#160;&#160;&#160; {<br />
  &#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">var</font> link = <font color="#a30f0f">@&quot;&lt;a href=&quot;&quot;javascript:OnItemSelected({0});&quot;&quot; class=&quot;&quot;ContextMenuItem&quot;&quot;&gt;{0}&lt;/a&gt;&quot;; </font></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">return string</font>.Format(link, i);<br />
  &#160;&#160;&#160; }</p>
<p>On génère directement le code html correspondant aux items et on l&rsquo;injecte dans le literal.<br />
On remarque que le click sur un item appelle la fonction javascript OnItemSelected:</p>
<p><font color="#0000ff">function</font> OnItemSelected(value)&#160; <br />{&#160; <br />&#160;&#160;&#160; $get(<font color="#a30f0f">&lsquo;&lt;%= tbSpread.ClientID %&gt;&rsquo;</font>).value = value;<br />
}</p>
<p>Cette fonction permet de remplir la TextBox avec la valeur de l&rsquo;item sélectionné.</p>
<p>A ce niveau là, on devrait avoir une ComboBox fonctionnelle.<br />
Voyons ce que cela donne en affichant la page:</p>
<p><img src="http://blog.developpez.com/media/ComboOriginale.jpg" width="334" height="255" alt="" /></p>
<p>On constate 3 problèmes:<br />
 (1) le Panel n&rsquo;a pas la même longueur que la TextBox<br />
 (2) le Panel n&rsquo;est pas aligné avec la TextBox<br />
 (3) le Panel apparaît en-dessous des listes déroulantes existantes</p>
<p>Pour le problème (1), on va utiliser un bout de code javascript qui va récupérer la longueur de la TextBox et l&rsquo;appliquer au Panel:<br />
<font color="#0000ff">function</font> pageLoad()<br />
{<br />
&#160;&#160;&#160;&#160;&#160;&#160; <font color="#008000">// On adapte la taille du panel &#224; la taille de la textbox</font><br />
&#160;&#160;&#160;&#160;&#160;&#160; $get(<font color="#a30f0f">&lsquo;&lt;%= pnlSpread.ClientID %&gt;&rsquo;</font>).style.width = $get(<font color="#a30f0f">&lsquo;&lt;%= tbSpread.ClientID %&gt;&rsquo;</font>).clientWidth;&#160; <br /> }</p>
<p>La fonction pageLoad est une fonction proposée par ASP.NET AJAX et qui est automatiquement appelée à chaque chargement de la page.</p>
<p>Maintenant, on obtient:<br />
<img src="http://blog.developpez.com/media/ComboTailleOK.jpg" width="335" height="252" alt="" /></p>
<p>Prochaine étape: aligner le Panel avec la TextBox (problème (2).<br />
On va encore utiliser un bout de code javascript:</p>
<p><font color="#0000ff">function</font> pageLoad()<br />
{<br />
&#160;&#160;&#160;&#160;&#160;&#160; <font color="#008000">// On adapte la taille du panel &#224; la taille de la textbox</font><br />
&#160;&#160;&#160;&#160;&#160;&#160; $get(<font color="#a30f0f">&lsquo;&lt;%= pnlSpread.ClientID %&gt;&rsquo;</font>).style.width = $get(<font color="#a30f0f">&lsquo;&lt;%= tbSpread.ClientID %&gt;&rsquo;</font>).clientWidth;&#160;</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; <font color="#008000">// On aligne le c&#244;t&#233; gauche du panel avec le c&#244;t&#233; gauche de la textbox</font><br />
&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">var</font> chngPosition = $find(<font color="#a30f0f">&lsquo;&lt;%= ddeSpread.ClientID %&gt;&rsquo;</font>)._dropPopupPopupBehavior;<br />
&#160;&#160;&#160;&#160;&#160;&#160; chngPosition.set_positioningMode(2);<br />
 }</p>
<p>On obtient alors:<br />
<img src="http://blog.developpez.com/media/ComboAlignLeft.jpg" width="334" height="249" alt="" /></p>
<p>Le dernier problème à régler est dû à un bug bien connu de IE (une explication en français <a href="http://download.microsoft.com/download/f/e/a/fea64d9a-7658-4939-84e9-186b8d16d52a/IEPlansAffichage.doc">ici</a>) . En effet, ce dernier ne gère pas correctement le z-index avec certains éléments HTML et du coup les listes déroulantes s&rsquo;affichent au-dessus de notre Panel ici.</p>
<p>Une solution souvent évoquée est d&rsquo;utiliser une IFRAME. Ne trouvant pas ça très &laquo;&nbsp;propre&nbsp;&raquo;, je me suis orienté vers une solution javascript. L&rsquo;idée est de masquer les listes déroulantes lors de l&rsquo;affichage du Panel et de les réafficher lors du masquage de ce dernier.</p>
<p>Afficher/masquer un élément HTML en javascript se fait très simplement via la fonction suivante:</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;<font color="#0000ff">function</font> ShowHideControl(control, toShow)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">if</font>(control == <font color="#0000ff">null</font>)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">return</font>; </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">if</font>(toShow)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; control.style.visibility = &lsquo;visible';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">else</font><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; control.style.visibility = &lsquo;hidden';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>La seule difficulté ici est de détecter l&rsquo;affichage/masquage du Panel. Pour cela, il suffit de trouver le nom des événements levés par le DropDownExtender et s&rsquo;y abonner. Dans un <a href="http://blog.developpez.com/lutecefalco?title=obtenir_facilement_les_methodes_propriet">précédent billet</a>, j&rsquo;ai donné une astuce pour obtenir facilement ces événements. Les 2 événements qui nous intéressent ici sont donc &laquo;&nbsp;showing&nbsp;&raquo; et &laquo;&nbsp;hiding&nbsp;&raquo;. Il ne nous reste plus qu&rsquo;à s&rsquo;y abonner et afficher/masquer les listes déroulantes. Le code javascript est le suivant:</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">var</font> bhvDde = $find(<font color="#a30f0f">&lsquo;&lt;%= ddeSpread.ClientID %&gt;&rsquo;</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; bhvDde.add_showing(ShowPanelSpread);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; bhvDde.add_hiding(HidePanelSpread); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">function</font> ShowPanelSpread()<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlPaymentFrequency.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">false</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlBasis.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">false</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlRoll.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">false</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlAdjustment.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">false</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlFixingFrequency.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">false</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlFixing.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">false</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#0000ff">function</font> HidePanelSpread()<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlPaymentFrequency.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">true</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlBasis.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">true</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlRoll.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">true</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlAdjustment.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">true</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlFixingFrequency.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">true</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ShowHideControl($get(<font color="#a30f0f">&lsquo;&lt;%= ddlFixing.ClientID %&gt;&rsquo;</font>), <font color="#0000ff">true</font>);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>Le résultat en image:</p>
<p><img src="http://blog.developpez.com/media/ComboOK.jpg" width="334" height="182" alt="" /></p>
<p>Have Fun!!!</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ASP.NET] Obtenir facilement les méthodes, propriétés et événements des objets de la Microsoft Ajax Library</title>
		<link>https://blog.developpez.com/lutecefalco/p6550/asp-net/obtenir_facilement_les_methodes_propriet</link>
		<comments>https://blog.developpez.com/lutecefalco/p6550/asp-net/obtenir_facilement_les_methodes_propriet#comments</comments>
		<pubDate>Thu, 13 Nov 2008 18:52:15 +0000</pubDate>
		<dc:creator><![CDATA[lutecefalco]]></dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Depuis que j&#8217;utilise ASP.NET AJAX, l&#8217;une des difficultés principales que j&#8217;ai rencontrées est d&#8217;obtenir la liste des méthodes, propriétés et événements des objets de la Microsoft Ajax Library ou de l&#8217;AJax Control Toolkit. J&#8217;ai par exemple eu besoin d&#8217;intercepter l&#8217;événement levé par le DropDownExtender lors de l&#8217;affichage/masquage de son panel associé. Je n&#8217;ai pas vraiment trouvé de doc bien explicite sur le sujet et j&#8217;étais contraint de parcourir différents forums sur le net ou alors [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Depuis que j&rsquo;utilise ASP.NET AJAX, l&rsquo;une des difficultés principales que j&rsquo;ai rencontrées est d&rsquo;obtenir la liste des méthodes, propriétés et événements des objets de la Microsoft Ajax Library ou de l&rsquo;AJax Control Toolkit.</p>
<p>J&rsquo;ai par exemple eu besoin d&rsquo;intercepter l&rsquo;événement levé par le DropDownExtender lors de l&rsquo;affichage/masquage de son panel associé.</p>
<p>Je n&rsquo;ai pas vraiment trouvé de doc bien explicite sur le sujet et j&rsquo;étais contraint de parcourir différents forums sur le net ou alors d&rsquo;aller voir dans le code source de l&rsquo;Ajax Control Toolkit.</p>
<p>Il y a quelques jours de cela, j&rsquo;ai trouvé, par hasard, une solution simple et rapide:</p>
<p><span id="more-1"></span></p>
<p>Mon IE était ouvert sur une des pages &laquo;&nbsp;ajaxisées&nbsp;&raquo; de mon projet et je naviguais dans les menus du plug-in pour IE, Web Development Helper (http://projects.nikhilk.net/WebDevHelper/) quand je suis tombé sur un menu appelé Script Class Browser:</p>
<p><img src="http://blog.developpez.com/media/Menu.jpg" width="741" height="136" alt="" /></p>
<p>En cliquant sur ce menu, on obtient un visualiseur de classes javascript que l&rsquo;on peut trouver sur la page (celles du framework et celles propres au projet)</p>
<p><img src="http://blog.developpez.com/media/ScriptBrowser.jpg" width="661" height="505" alt="" /></p>
<p>En parcourant les menus, on peut trouver par exemple la présence d&rsquo;un StringBuilder et de ses fonctions associées:</p>
<p><img src="http://blog.developpez.com/media/StringBuilder.jpg" width="665" height="505" alt="" /></p>
<p>Pour en revenir à nos moutons, j&rsquo;ai pu obtenir la liste des événements que je recherchais dans la classe AjaxControlToolkit.DropDownBehavior:</p>
<p><img src="http://blog.developpez.com/media/DropDownBehavior.jpg" width="659" height="511" alt="" /></p>
<p>Have fun!!!</p>
<p>edit: Apparemment, le visualiseur de classes javascript ne les montre pas toutes, comme par exemple Sys.Browser qui permet d&rsquo;obtenir des infos sur le navigateur utilisé</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
