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

时间:2014-09-05 14:56:32

标签: javascript jquery vb.net cascadingdropdown

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

这是我的Cascading DropDown:

<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将毫无困难地找到它。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

ajaxccd_ddlTPA.Enabled = False

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

如果您需要在浏览器中操作控件,那么您需要以框架仍将其呈现给浏览器的方式禁用它。

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

示例

在页面的头部(* .aspx)中添加此代码。此代码在Page Load事件上执行。

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