Как получить сторону сценария элемента управления автозаполнением с помощью элемента управления Script (ASP.Net) - PullRequest
0 голосов
/ 06 декабря 2008

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

Объяснение

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

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, он возвращается в ноль, несмотря на то, что свойство ID имеет свойство text. (Т.е. элемент управления не существует)

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

  autocomplete.OnClientPoplating = someScript;

1 Ответ

0 голосов
/ 08 декабря 2008

ОТВЕТ

Буя нашел его. Оказывается, у автозаполнения есть встроенный способ доступа к его событиям в 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);

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

this._autoComplete.add_populating(this._onAutoCompletePopulating);

И бум, он установлен.

...