【问题标题】:Telerik control events always being triggeredTelerik 控制事件总是被触发
【发布时间】:2013-08-14 04:44:05
【问题描述】:

我正在使用 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>

TextChanged 事件

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();
        }

【问题讨论】:

  • 您是否有理由将您的事件包含在 ajax 管理器中,而不仅仅是在 ddlProject 下拉列表中使用 SelectedIndexChanged(或其他事件)?似乎这样可以解决您的问题,但是我不知道您的要求是什么。
  • 使用 ajax 管理器的原因是 Telerik 套件的一部分还有一个加载面板,当它更新时,它会出现在每个控件上,这是我非常喜欢的。我可以只使用一个更新面板并将所有内容都包裹在其中一个上,或者有单独的可能。我在 Ajax 管理器中包含了 EventName,因为我不确定这是否是问题所在。无论我是否指定事件,它仍然会触发页面上的所有控件事件。

标签: telerik radcombobox radajaxmanager


【解决方案1】:

不确定这是否会有所帮助,但在我们的实例中,问题归结为 IIS 服务器缓存内容,这对 Telerik 控件有不利影响。当我们将 web.config 设置从 debug="true" 切换到 debug="false" 时,我们才变得明显,因为这允许 IIS 启用其缓存和其他相关优化,由于某种原因关闭浏览器中的所有缓存仍然破坏了控件,但是在 IIS 中将其关闭或将其转回调试模式即可解决。

【讨论】:

    【解决方案2】:

    Telerik 刚刚通知我这是一个错误,并已转交给他们的开发团队。

    不一定是有效的答案,但可以解释我遇到问题的原因。

    【讨论】:

    • 你有没有发现是什么原因造成的以及如何解决它,因为我目前发现了同样的行为。
    • 抱歉回复晚了。这是控件中的一个错误。 Telerik 从未就修复问题回复我,因此我放弃了使用控件。
    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2014-04-20
    • 1970-01-01
    相关资源
    最近更新 更多