我有一个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将毫无困难地找到它。
任何帮助将不胜感激!
答案 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" />