2013-02-13 1 views
1

Я пытаюсь динамически включить/отключить элемент управления Autocomplete extender из набора инструментов Ajax Control Toolkit на основе выбора, который пользователь делает в выпадающем списке.Динамически отключить Ajax Control Toolkit Autocomplete Extender

У моего приложения ASP.NET 4.0 Webforms есть раскрывающийся список, и в зависимости от того, какая страна выбрана из него, автоэкстендер zipcode должен быть включен или отключен.

Моя разметка:

<asp:DropDownList runat="server" ID="ddlCountries"> 
    <Items> 
      <asp:ListItem Text="Switzerland" Value="CH" /> 
      <asp:ListItem Text="Germany" Value="D" /> 
      <asp:ListItem Text="Italy" Value="I" /> 
      <asp:ListItem Text="France" Value="F" /> 
    </Items> 
</asp:DropDownList> 
<br /> 

<asp:TextBox runat="server" ID="tbxZipcode" /> 

<asp:AutoCompleteExtender 
    runat="server" ID="acZipcode" BehaviorID="ZipcodeBehavior" 
    ServiceMethod="GetZipCode" 
    TargetControlID="tbxZipCode" MinimumPrefixLength="1" CompletionInterval="15" 
    OnClientItemSelected="PopulateTextboxes" CompletionSetCount="25" /> 

С этой установкой, то автозаполнение расширители пинки в и отображает действительные Швейцарские Почтовые индексы - жизнь хороша :-)

ОДНАКО: если пользователь выбирает другую страну, Я хочу stop этот автозаполняющий расширитель - у меня нет других zipcodes в моей базе данных для отображения, а отображение швейцарских zip-кодов для Франции не имеет смысла.

Так что я пытался что-то вроде этого, чтобы захватить change событие в раскрывающемся списке

$(document).ready(function() { 
    $('#<%= ddlCountries.ClientID %>').change(function() { 
     var chosenCountry = $(this).val(); 

     var behavior = $('#ZipcodeBehavior'); 

     if (chosenCountry == "CH") { 
     behavior.disabled = ''; 
     } else { 
     behavior.disabled = 'disabled'; 
     } 
    }); 
}); 

я могу получить ZipcodeBehavior просто отлично - но как только она у меня - ничего не похоже на работу больше ...

Как можно динамически отключить AutocompleteExtender Ajax Control Toolkit?

В разметке, статически я сделать это с помощью

<asp:AutoCompleteExtender Enabled="False" .... /> 

, а потом вообще ничего не визуализируется на мою страницу.

ответ

1

Во-первых, вы не можете получить клиентский объект MicrosoftAjax с помощью селектора jQuery. Таким образом, этот синтаксис var behavior = $('#ZipcodeBehavior'); не имеет смысла. Вместо этого используйте $find("BehaviorID").

Чтобы добавить отключая способность AutoCompleteExtender добавить ссылку на этот сценарий ScriptManager управления:

Sys.Extended.UI.AutoCompleteBehavior.prototype.set_enabled = function (value) { 
    try { 
     $removeHandler(this.get_element(), "keydown", this._keyDownHandler); 
    } catch (error) {} //just escape error if handler already removed 
    this._timer.set_enabled(!! value); 
    if (value) { 
     this._keyDownHandler = Function.createDelegate(this, this._onKeyDown); 
    } else { 
     this._keyDownHandler = Function.createDelegate(this, function() {}); 
    } 
    $addHandler(this.get_element(), "keydown", this._keyDownHandler); 
}; 

После того, что вы можете для инвалидов/включить расширитель с этим кодом:

$('#<%= ddlCountries.ClientID %>').change(function() { 
    var chosenCountry = $(this).val(); 
    $find("ZipcodeBehavior").set_enabled(chosenCountry == "CH"); 
}); 

BTW, с Enabled="false" свойство, указанное в разметке. Я боюсь, что вы не должны включать расширитель на клиенте.

+0

+1 Javascript действительно граничит с Черной Магией и Вуду .... :-) У меня нет понятия, что именно вы здесь делаете, но это работает как шарм! Благодаря! –

Смежные вопросы