Как мне получить скрипт управления автозаполнением со стороны скриптового элемента управления (ASP.Net)

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

Вопрос

Проблема Как мне захватить и назначить события в элементе управления автозаполнением Ajax Toolkit, используя элемент управления script в файле script?

Объяснение

По сути, я создал элемент управления script для объединения текстового поля и элемента управления автозаполнением, чтобы у меня мог быть работающий универсальный элемент управления для автозаполнения.Следующим шагом было добавление таких элементов, как обрабатываемое изображение, во время поиска его элементов.Это казалось достаточно простым.

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

  return new ScriptDescriptor[] { desc };
}

И затем на javascript обычный:

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');
},

Теперь это должно сработать, НО этого не происходит.Почему?Потому что, по-видимому, на странице нет элемента управления автозаполнением, отображаемого так, как это было бы при обычном управлении.Поэтому, когда он доходит до части $ get, он выдает значение null, несмотря на то, что свойство ID имеет свойство text .(Т. е. элемент управления не существует)

Возможно ли это сделать или я должен использовать серверную часть свойств OnXyz для назначения метода?Как в:

  autocomplete.OnClientPoplating = someScript;
Это было полезно?

Решение

ОТВЕТ

Буя Нашел это.Оказывается, автозаполнение имеет встроенный способ доступа к его событиям в javascript:

На стороне сервера вы должны установить BehaviorID:

autoComplete.BehaviorID = "autoCompleteBehavior";

А затем установите его в методе GetScriptDescriptors:

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

  return new ScriptDescriptor[] { desc };
}

Конечно, вам нужно добавить сторону сценария свойств, чтобы зафиксировать это значение, и как только вы это сделаете, вам придется использовать Find, чтобы получить его.Затем вы должны создать обработчик события:

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

Наконец, используйте встроенный установщик событий в элементе управления автозаполнением (Behavior object).:

this._autoComplete.add_populating(this._onAutoCompletePopulating);

И бум, все готово.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top