AutoCompleteExtender : Plusieurs usercontrol dans une page

OLCHTEAM Messages postés 3 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008 - 25 sept. 2008 à 10:20
OLCHTEAM Messages postés 3 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008 - 25 sept. 2008 à 17:50
Bonjour,

J'ai créé un WebUserControl contenant un textbox et un composant ajaxToolkit:AutoCompleteExtender.
Le WebUserControl fonctionne tres bien en utilisation seul. Il fonctionne aussi tres bien en edition dans un GridView.
Mais j'ai un problème lorsque je veut afficher plusieur fois le WebUserControl.

Le premier conflis a été une erreur javascript indiquant la presence sur la meme pages de deux id identique.
Pour contourner ce probleme je redefinis dans chaque WebUserControl la valeur de la propriété "BehaviorID".

Il n'y a alors plus d'erreur qui s'affiche lors de l'execution des composants en l'absence des animations presentent dans mon composant ajaxToolkit:AutoCompleteExtender.
En effet les animations recherche le composant selon le "BehaviorID" et celui-ci est defini en dur dans le code.

Mais la valeur récupéré dans le champs "HiddenFieldIdPointRemarquable" par la methode "AutoCompleteExtenderPointRemarquable_ClientItemSelected" lors de la selection d'un item dans le premier WebUserControl se retrouve automatiquement dans le deuxieme.

La valeur "HiddenFieldIdPointRemarquable.ClientID" semblant etre la meme pour les deux WebUserControls.

Donc je recherche une solution pour gerer plusieurs instances d'un meme WebUserControl, contenant un composant ajax, dans une page aspx.

Merci

2 réponses

OLCHTEAM Messages postés 3 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008
25 sept. 2008 à 10:26
J'ai oublié de vous fournir mon code :





<


asp
:
TextBox



ID
="TextBoxPointRemarquable"



runat
="server"



autocomplete
="off"



SkinID
="skinLibelleLong"



ToolTip
="
<%$ Resources:POINT_REMARQUABLE_TOOLTIP %>

"></
asp
:
TextBox


>

<




ajaxToolkit
:
AutoCompleteExtender



ID
="AutoCompleteExtenderPointRemarquable"








runat
="server"








BehaviorID
="AutoCompleteEx"








TargetControlID
="TextBoxPointRemarquable"










ServiceMethod
="GetListePointRemarquable"










ServicePath
="~/WebServices/PointRemarquableWS.asmx"








CompletionInterval
="20"








MinimumPrefixLength
="2"










EnableCaching
="true"








CompletionSetCount
="12"










UseContextKey
="True"



SkinID
="green"










OnClientItemSelected
="AutoCompleteExtenderPointRemarquable_ClientItemSelected">



<%





--

<OnShow>



<Sequence>








<OpacityAction Opacity="0" />



<HideAction Visible="true" />













<ScriptAction Script="



// Cache the size and setup the initial size



var behavior = $find('AutoCompleteEx');



if (!behavior._height) {



var target = behavior.get_completionList();



behavior._height = target.offsetHeight - 2;



target.style.height = '0px';



}" />

















<FadeIn />



<Length PropertyKey="height" StartValue="0" EndValueScript="$find('AutoCompleteEx')._height" />








</Sequence>



</OnShow>



<OnHide>












<FadeOut />



<Length PropertyKey="height" StartValueScript="$find('AutoCompleteEx')._height" EndValue="0" />








</OnHide>


0
OLCHTEAM Messages postés 3 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008
25 sept. 2008 à 17:50
Pour le probleme de valeur mal récupéré je viens de trouver une solution. (ce n'est pas un problème de ClientID)
Le problème viens du faite que la fonction appelé par "OnClientItemSelected" est la meme sur les différents WebuserControl ("AutoCompleteExtenderPointRemarquable_ClientItemSelected")


Afin de remedier a ce problème j'ai rajouté une partie dynamique au nom de ma fonction dans sa définition :
    var AutoCompleteExtenderPointRemarquable_ClientItemSelected<%=TextBoxPointRemarquable.ClientID %> = function(sender, e){
        $get('<%=HiddenFieldIdPointRemarquable.ClientID %>').value = e.get_value(); 
    }



et lors du load de mon control je renome la fonction appelé de la meme facon :
    protected void Page_Load(object sender, EventArgs e)
    {
        AutoCompleteExtenderPointRemarquable.OnClientItemSelected = "AutoCompleteExtenderPointRemarquable_ClientItemSelected" + TextBoxPointRemarquable.ClientID;
    }



Maintenant j'ai les bonnes valeurs dans chaque composant... reste le problème de l'animation et de la presence en dur du behaviorID que je n'arrive pas a mettre en dynamique...
Avez vous des pistes de reflexions?
0
Rejoignez-nous