禁用 AjaxToolkit CascadingDropDown 后,无法在客户端获取它

Cannot get an AjaxToolkit CascadingDropDown on client side after disabling it

本文关键字:客户端 获取 AjaxToolkit CascadingDropDown 禁用      更新时间:2023-09-26

我有一个CascadingDropDown,我不想在PageLoad上运行,但会在下拉列表更改后运行。为了实现这一点,我在页面加载事件中禁用了它,然后才有机会运行。然后,当 ddl 更改时,我将使用 jquery 来启用 CascadingDropDown。我遇到的问题是jquery在禁用CascadingDropDown后找不到它。有谁知道我如何掌握它,或者另一种方法?

这是我的级联下拉列表:

<ajaxToolkit:CascadingDropDown id="ajaxccd_ddlFoo" runat="server"
TargetControlid="ddlFoo" ParentControlid="ddlBar" PromptText="-- Select --"
Category="Foo" ServicePath="~/AJAXWebServices/CascadingDropDownPopulator.asmx" 
ServiceMethod="Populate_ddlFoo" />

我在 VB.net 页面加载事件中禁用它的代码:

ajaxccd_ddlTPA.Enabled = False

这是我尝试掌握对象客户端的地方:

$(".ddlBarCls").click(function () {
        var ajaxccd_ddlFooID = document.getElementById('ajaxccd_ddlFooID').value;
        var ajaxccd_ddlFoo = $find(ajaxccd_ddlFooID);
    });

问题是ajaxccd_ddlFoo总是什么也没返回。我已经确认,当ajaxccd_ddlTPA未禁用服务器端时,jquery将毫不费力地找到它。

任何帮助将不胜感激!

ajaxccd_ddlTPA.Enabled = False

当您禁用控件服务器端(见上文(时,实际发生的是 asp.net 框架不会将控件呈现给浏览器。这就是你的jquery找不到控件的原因,因为浏览器中不存在该控件。

如果需要在浏览器中操作控件,则需要禁用它,以使框架仍将其呈现给浏览器。

一种方法是呈现启用的控件,但随后在浏览器的页面加载事件上使用 javascript 来禁用它。

将此代码添加到主页(*.aspx(的头部版块。此代码在页面加载事件上执行。

<script type="text/javascript">
    function pageLoad(sender, args) {
        $find("myFoo").add_populated(onPopulated);
    }
    function onPopulated() {
        $get("ddlFoo").disabled = true;
    }
</script>

并在 CascadingDropDown 控件上添加必要的 BehaviorID 属性

<ajaxToolkit:CascadingDropDown id="ajaxccd_ddlFoo"
    runat="server"
    TargetControlid="ddlFoo"
    ParentControlid="ddlBar"
    BehaviorID="myFoo"
    PromptText="-- Select --"
    Category="Foo"
    ServicePath="~/AJAXWebServices/CascadingDropDownPopulator.asmx" 
    ServiceMethod="Populate_ddlFoo" />