1

ユーザーがドロップダウン リストで行った選択に基づいて、Ajax コントロール ツールキットからオートコンプリート エクステンダー コントロールを動的に有効/無効にしようとしています。

私の ASP.NET 4.0 Webforms アプリにはドロップダウン リストがあり、そこから選択した国に応じて、郵便番号自動拡張機能を有効または無効にする必要があります。

私のマークアップ:

<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" />

このセットアップでは、オートコンプリート エクステンダーが起動し、有効なスイスの郵便番号が表示されます - 人生は良いです :-)

ただし、ユーザーが別の国を選択した場合は、このオートコンプリート エクステンダーを停止したいと思います。データベースに表示する他の郵便番号がなく、フランスのスイスの郵便番号を表示しても意味がありません。

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-しかし、一度取得すると、もう何も機能しないようです...

Ajax Control Toolkit の AutocompleteExtender を動的に無効にするにはどうすればよいですか?

マークアップでは、静的に、次を使用して行います

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

そして、私のページには何もレンダリングされません。

4

1 に答える 1

1

まず、jQuery セレクターで MicrosoftAjax クライアント オブジェクトを取得できません。したがって、この構文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");
});

ところで、Enabled="false"マークアップで指定されたプロパティでは、クライアントでエクステンダーを有効にしないでください。

于 2013-02-13T11:34:05.697 に答える