下拉列表(在更新面板中)导致FULL PostBack!

时间:2010-01-26 09:47:06

标签: asp.net ajax ajaxcontroltoolkit

我的AJAX和ASP.NET 3.5有问题:( 问题真的很奇怪,因为我在不同的页面上使用相同的东西,它在那里工作正常,但在这个特定的页面上,这是行不通的。

这就是我所拥有的:

    <asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional" Visible="true" RenderMode="Inline">
                <ContentTemplate>
<asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" CssClass="dropdown" AutoPostBack="true" OnSelectedIndexChanged="Provision_PortedTelcoChanged"></asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>

在DropDown之前的路上有一个DIV(html一个),然后是几个asp:Panels。 我不明白为什么这会造成全面的回复?!

有什么想法吗?感谢

11 个答案:

答案 0 :(得分:18)

我遇到了同样的问题...虽然它没有在复制的代码中显示,但请检查以确保您没有 ClientIDMode = Static 中的任何控件updatepanel ....让他们继承

至少可能触发回发的任何控件

答案 1 :(得分:5)

您的下拉列表中AutoPostBack设置为true。这就是为什么你要回帖而不是AsyncPostBack,如果这是你想要的。

从下拉列表中删除AutoPostBack=true 并为您的UpdatePanel设置一个Async触发器设置到下拉列表及其eventname="SelectedIndexChanged"

答案 2 :(得分:4)

我有同样的问题...

检查您的WEB.CONFIG

<xhtmlConformance mode="Legacy"/>

这条线..并且只是删除它!!

为我工作。谢谢http://andrew-murphy.co.uk/?p=152

答案 3 :(得分:2)

请原谅我缺乏编程技巧:|这一切都在一直有效,但是因为其中一个动作页面“看起来”像是POST POSTED,而不是。多么可惜!!!

抱歉你的时间过去了!

答案 4 :(得分:2)

如果你有一些Autopostback="true"ClientIdMode="Static"的asp组件,你必须使用触发器。

像这样:

<asp:UpdatePanel ID="upPrinceOffuce" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlPrintOffice" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
         <asp:DropDownList ID="ddlPrintOffice" runat="server" ClientIDMode="Static" AutoPostBack="true" ...blah blah
</asp:DropDownList>
    </ContentTemplate>
</asp:UpdatePanel>

答案 5 :(得分:1)

如何绑定DropDown?您提供的代码在我身边使用静态项目。也许它是导致问题的其他控件中的某些东西。

我注意到你的UpdatePanel将其UpdateMode属性设置为条件,但是你没有定义任何触发器。当你的下拉列表触发其selectedIndexChanged事件时,你可以尝试显式设置更新面板应该执行异步回发。您可以使用以下标记:

<asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional" Visible="true"
    RenderMode="Inline">
    <ContentTemplate>
        <asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" 
            AutoPostBack="true" OnSelectedIndexChanged="Provision_PortedTelcoChanged">
        </asp:DropDownList>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlNewService_PortTelco" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

答案 6 :(得分:1)

将AutoPostBack属性设置为true应足以导致部分回发,但不会发生这种情况,而是按正确描述的方式触发完整的回发。

以下解决方法适用于我:

  1. 删除AutoPostBack属性。
  2. 使用“onchange”客户端事件触发回发。
  3. 这是原始DropDownList的样子:

    <asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" CssClass="dropdown" OnChange="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(this.name, '', true, '', '', false, true))" OnSelectedIndexChanged="Provision_PortedTelcoChanged"></asp:DropDownList>
    

    有关WebForm_PostBackOptions参数的更多详细信息,请参阅以下内容:

    function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
    

    http://msdn.microsoft.com/en-us/library/system.web.ui.postbackoptions_members(v=VS.90).aspx

答案 7 :(得分:0)

当Dropdownlist Autopostback属性设置为true时会出现同样的问题 并通过将下拉列表ID添加到updatepanel触发器

来解决问题

答案 8 :(得分:0)

我有这个问题。我的Dropdownlist在HTML表格中,我的更新面板包含两个单独的行。我通过将更新面板包裹在整个表而不是仅仅两行来修复问题。

答案 9 :(得分:0)

解决此问题的另一种方法是:

声明库

using AjaxControlToolkit;

然后你可以在这些方面做点什么

private void InitControl()
{        
            //FIX - DROP DOWN
            ToolkitScriptManager scrManager = (ToolkitScriptManager)Page.Master.Controls[0].Controls[0].FindControl("manScript");
            scrManager.RegisterAsyncPostBackControl(ddlNewService_PortTelco);
}

答案 10 :(得分:0)

将AutoID值设置为ClientIDMode属性。它对我有用。我在不同的浏览器(即Google Chrome和Firefox)中有不同的行为。