Comment obtenir le côté script de contrôle de saisie semi-automatique avec un contrôle de script (ASP.Net)

StackOverflow https://stackoverflow.com/questions/346632

Question

Problème Comment capturer et attribuer les événements sur un contrôle de saisie semi-automatique Ajax Toolkit à l'aide d'un contrôle de script sur le fichier de script?

Explication

J'ai essentiellement créé un contrôle de script pour combiner une zone de texte et un contrôle de saisie semi-automatique afin de pouvoir disposer d'un contrôle générique de travail pour une saisie semi-automatique. L'étape suivante consistait à ajouter des éléments tels qu'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 sur le javascript la normale:

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 ça ne marche pas. Pourquoi? Parce qu'apparemment, il n'y a pas de contrôle autocomplete rendu à la page comme le serait un contrôle normal. Donc, quand il arrive à la partie $ get, il revient à zéro même si la propriété ID a 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 assigner une méthode? Comme dans:

  autocomplete.OnClientPoplating = someScript;
Était-ce utile?

La solution

RÉPONSE

Booyah l'a trouvé. Il s'avère que l'auto-complétion dispose d'une méthode intégrée pour accéder à ses événements en javascript:

Côté serveur, vous devez définir le BehaviorID:

autoComplete.BehaviorID = "autoCompleteBehavior";

Et définissez-le ensuite 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é de script de propriétés pour capturer cette valeur, puis vous devez utiliser la fonction Rechercher 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);

Enfin, utilisez le configurateur d'événements intégré dans le contrôle autocomplete (objet Behavior):

this._autoComplete.add_populating(this._onAutoCompletePopulating);

Et boum, c'est prêt.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top