Как мне получить скрипт управления автозаполнением со стороны скриптового элемента управления (ASP.Net)
-
19-08-2019 - |
Вопрос
Проблема Как мне захватить и назначить события в элементе управления автозаполнением 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);
И бум, все готово.