【问题标题】:Using a cascading drop down on the same aspx page as an update panel在与更新面板相同的 aspx 页面上使用级联下拉菜单
【发布时间】:2011-08-03 21:43:37
【问题描述】:

我正在使用 ASP.NET 4.0。我在同一页面上有 2 个DropDownList、一个CascadingDropDown(来自 Ajax Control Toolkit)和一个UpdatePanel

下拉菜单不在更新面板中,它们的功能运行良好(一旦从 DropDownList 中选择一个选项,CascadingDropDown 就会执行它的操作并更新第二个 DropDownList)。

更新面板只包含一个按钮和一个文本框。单击按钮时,将有一个事件处理程序来设置文本框上的文本。

当带有下拉菜单的代码部分被注释掉时,更新面板工作正常,但是一旦取消注释下拉菜单,单击按钮就不再刷新文本框,也不会发生回发。

aspx页面:

<asp:ScriptManager ID="scriptManager" runat="server">
</asp:ScriptManager>

<div>
    <label for="<%= ddOne.ClientID %>" >DD one</label>
    <asp:DropDownList ID="ddOne" runat="server">
        <asp:ListItem Text="" Value="-1" />
        <asp:ListItem Text="Option one" Value="1" />
        <asp:ListItem Text="Option two" Value="2" />
        <asp:ListItem Text="Option three" Value="3" />
    </asp:DropDownList>
</div>

<ajaxToolkit:CascadingDropDown 
        ID="ccdOne"
        runat="server"
        ParentControlID="ddOne"
        TargetControlID="ddTwo" 
        Category="Category" 

        ServicePath="SomeWebService.asmx"
        ServiceMethod="SomeWebMethod"
        EmptyText="None available"
        EmptyValue="-1"
        LoadingText="Loading..." />

<div>
    <label for="<%= ddTwo.ClientID %>">DD two</label>
    <asp:DropDownList ID="ddTwo" runat="server">
    </asp:DropDownList>
</div>

<asp:UpdatePanel runat="server" ID="upPanelOne">

    <ContentTemplate>

        <asp:Button ID="aButton" runat="server" Text="Click me" onclick="aButton_Click" />
        <asp:TextBox ID="txtOne" runat="server" />

    </ContentTemplate>


</asp:UpdatePanel>

背后的代码:

    protected void aButton_Click(object sender, EventArgs e)
    {
        txtOne.Text = "Hello world";
    }

有什么想法吗?

注意事项:

UpdatePanel 自己工作正常

DropDownLists 与级联下拉工作正常

DropDownLists 与更新面板在同一页面上使用,但不在更新面板中时,更新面板停止工作?

【问题讨论】:

  • 我看到你已经找到了错误的原因。请将您的发现作为对这个问题的答案发布并接受它作为答案。这样做可以帮助其他有同样问题的人。

标签: asp.net asp.net-ajax ajaxcontroltoolkit


【解决方案1】:

将以下标签添加到您的updatepanel

<Triggers>
            <asp:AsyncPostBackTrigger ControlID="aButton" EventName="Click" /
        </Triggers>

所以应该是这样的:

<asp:UpdatePanel runat="server" ID="upPanelOne">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="aButton" EventName="Click" /
        </Triggers>
        <ContentTemplate>
            <asp:Button ID="aButton" runat="server" Text="Click me" onclick="aButton_Click" />
            <asp:TextBox ID="txtOne" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>

【讨论】:

  • 由于按钮是更新面板中的子控件,我认为我不需要像那样显式添加触发器......但我尝试了任何方式,就像以前一样,它在DropDownList 的代码已被注释掉,但是当该代码在其上时它不起作用:(
  • 好的,我知道问题出在哪里。显然,如果您在回发时通过 javascript 将元素添加到服务器控件下拉列表中,您将收到一个异常抛出,告诉您关闭事件验证或一些此类消息。似乎什么也没发生,因为我使用的是更新面板,所以我从未看到错误消息。详情请见:odetocode.com/blogs/scott/archive/2006/03/20/…
【解决方案2】:

我遇到了同样的问题,但我按照 Ben 的评论告诉我设置 EnableEventValidation="false" 已经解决了我的问题,现在可以正常工作了。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    相关资源
    最近更新 更多