我正在使用 Telerik 组合框来创建级联多选下拉列表。
我在页面 ddlProject、ddlUnit、ddlDiscipline、ddlDocType 上有几个下拉列表。
我正在使用 Telerik RadAjaxManager 来触发控件的更新,其标记如下:
<telerik:RadAjaxManager ID="ajaxManager" runat="server" DefaultLoadingPanelID="lpnlLoading" >
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="ddlProject" EventName="TextChanged">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="ddlUnit" UpdatePanelRenderMode="Inline"/>
<telerik:AjaxUpdatedControl ControlID="ddlDiscipline" UpdatePanelRenderMode="Inline" />
<telerik:AjaxUpdatedControl ControlID="ddlDocType" UpdatePanelRenderMode="Inline" />
<telerik:AjaxUpdatedControl ControlID="ddlPhase" UpdatePanelRenderMode="Inline" />
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID="ddlUnit" EventName="TextChanged" >
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="ddlDocType" UpdatePanelRenderMode="Inline" />
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID="ddlDiscipline" EventName="TextChanged">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="ddlDocType" UpdatePanelRenderMode="Inline" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
ddlProject 更新 ddlUnit、ddlDiscipline 和 ddlDocType。
ddlUnit 和 ddlDiscipline 仅用于更新 ddlDocType 但我发现当这些控件中的任何一个发生更改时都会触发 TextChanged 事件。
我已经尝试注释掉 Ajax 管理器以查看是否正在调用 ddlProject_TextChanged 并且它不是,只有当 Ajax 管理器在页面上时。我希望启用 Ajax 管理器来抑制页面回发,并且它会为每个组合框显示一个加载面板,我认为这可以提供良好的用户体验,显示它们何时加载。
所有这些都在用户控件中,因为我想在多个页面上使用它。
当单位和学科发生变化时,有人可以提供解决方案来阻止 ddlProject_TextChanged 被解雇吗?
提前致谢
安迪
编辑:
我刚刚发现它可能不是 AjaxManager。每次页面回发时,控制事件似乎都会被触发。我还有一个标准的 ASP.NET 按钮,单击时不会数据绑定到任何复选框,它只是处理用户控件中的选定值。它甚至在包含组合框的用户控件之外。
组合框结构:
<telerik:RadComboBox ID="ddlUnit" runat="server" CheckBoxes="true" EnableCheckAllItemsCheckBox="true"
MaxHeight="450px" Width="300px" DataTextField="Value" DataValueField="Key" Label="Unit:"
LabelCssClass="HeaderLabel" DropDownWidth="600px" Height="400px"
AutoPostBack="true" OnTextChanged="ddlUnit_TextChanged">
</telerik:RadComboBox>
文本更改事件
protected void ddlDiscipline_TextChanged(object sender, EventArgs e)
{
CTRmDataService ctrmDS = new CTRmDataService();
this.ddlDocType.DataSource = ctrmDS.GetDocumentTypesForProjectsDisciplineAndUnit(GetSelectedProjects(),
GetSelectedDisciplines(),
GetSelectedUnits(),
LoggedOnUser.Id);
this.ddlDocType.DataBind();
}