Domanda

problema Come posso acquisire e assegnare gli eventi su un controllo di completamento automatico Ajax Toolkit usando un controllo di script nel file di script?

Spiegazione

Fondamentalmente ho creato un controllo di script per combinare una casella di testo e un controllo di completamento automatico in modo da poter avere un controllo generico funzionante per un completamento automatico. Il passo successivo è stato aggiungere elementi come un'immagine di elaborazione mentre cerca i suoi elementi. Sembrava abbastanza 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 };
}

E poi su javascript il 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');
},

Ora dovrebbe funzionare MA non funziona. Perché? Perché apparentemente non esiste un controllo di completamento automatico reso alla pagina come sarebbe un controllo normale. Quindi, quando arriva alla parte $ get, diventa nulla nonostante la proprietà ID abbia una proprietà text. (IE il controllo non esiste)

È possibile fare o devo usare il lato server delle proprietà di OnXyz per assegnare un metodo? Come in:

  autocomplete.OnClientPoplating = someScript;
È stato utile?

Soluzione

RISPOSTA

Booyah l'ha trovato. Si scopre che il completamento automatico ha un modo integrato per accedere ai suoi eventi in javascript:

Sul lato server devi impostare BehaviorID:

autoComplete.BehaviorID = "autoCompleteBehavior";

E quindi impostalo nel metodo GetScriptDescriptors:

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

  return new ScriptDescriptor[] { desc };
}

Ovviamente devi aggiungere il lato dello script delle proprietà per catturare quel valore, e una volta fatto devi usare Trova per ottenerlo. Quindi devi creare il gestore eventi:

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

Infine usa il settatore di eventi incorporato nel controllo di completamento automatico (oggetto Behavior):

this._autoComplete.add_populating(this._onAutoCompletePopulating);

E boom, è pronto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top