2008-12-06 10 views
0

Problème Comment capturer et assignez les événements sur un contrôle Ajax Toolkit autocomplete en utilisant un contrôle de script sur le fichier de script?Comment puis-je du côté du script de contrôle Autocomplete avec un contrôle de script (ASP.Net)

Explication

Je essentiellement créé un contrôle de script pour combiner une zone de texte et un contrôle de saisie semi-automatique pour que je puisse avoir un contrôle générique travaillant pour une saisie semi-automatique. L'étape suivante consistait à ajouter des éléments comme une image de traitement pendant la recherche de ses éléments. Cela semblait assez facile.

protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors() 
{ 
    ScriptControlDescriptor desc = new ScriptControlDescriptor 
    ("NDI.WebControls.Client.GenericAutoComplete", this.ClientID); 
    desc.AddProperty("autoCompleteID", autoComplete.ClientID); 

    return new ScriptDescriptor[] { desc }; 
} 

Et puis le javascript normal:

initialize: function() 
{ 
    this._autoComplete = $get(this._autoCompleteID); 
    //this._autoCompleteID does have a value 

    this._autoCompleteClientPopulating = 
    Function.createDelegate(this, this.handleAutoCompleteClientPopulating); 

    $addHandler(this._autoComplete, "clientPopulating", 
    this._autoCompleteClientPopulating); 

    NDI.WebControls.Client.GenericAutoComplete.callBaseMethod(this, 'initialize'); 
}, 

Maintenant, cela devrait fonctionner, mais il ne fonctionne pas. Pourquoi? Parce qu'apparemment, il n'y a pas de contrôle de saisie semi-automatique rendu à la page comme le ferait un contrôle normal. Donc, quand il arrive à la partie $ get, il arrive à zéro malgré la propriété ID ayant une propriété text. (IE le contrôle n'existe pas)

Est-ce possible ou dois-je utiliser le côté serveur des propriétés OnXyz pour affecter une méthode? Comme dans:

autocomplete.OnClientPoplating = someScript; 

Répondre

0

RÉPONSE

Booyah trouvé. Active la saisie semi-automatique a construit dans le moyen d'accéder à ses événements javascript:

côté

Server, vous devez définir l'BehaviorID:

autoComplete.BehaviorID = "autoCompleteBehavior"; 

Et puis défini dans la méthode GetScriptDescriptors:

protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors() 
{ 
    ScriptControlDescriptor desc = new 
    ScriptControlDescriptor("NDI.WebControls.Client.GenericAutoComplete", ClientID); 
    desc.AddProperty("autoCompleteID", autoComplete.BehaviorID); 

    return new ScriptDescriptor[] { desc }; 
} 

Bien sûr, vous devez ajouter le côté du script des propriétés pour capturer cette valeur, et une fois que vous faites cela, vous devez utiliser Find pour l'obtenir. Ensuite, vous devez créer le gestionnaire d'événements:

this._autoComplete = $find(this._autoCompleteID); 
this._onAutoCompletePopulating = 
    Function.createDelegate(this, this.handleOnAutoCompletePopulating); 

utiliser Enfin, le construit en setter événement dans le contrôle de saisie semi-automatique (objet Comportement):

this._autoComplete.add_populating(this._onAutoCompletePopulating); 

Et boum, il est mis.

Questions connexes