【问题标题】:UpdatePanel Trigger causing full page postbackUpdatePanel 触发器导致整页回发
【发布时间】:2015-07-21 07:49:15
【问题描述】:

我有两个下拉列表,其中一个在更新面板内,另一个在更新面板外。当在 ddlFaculty 上更改索引时,整个页面将被回发,而不是更新面板中内容的一部分。

我在 ASP 文档中读到,有时验证控件会阻塞更新面板,但我不太确定这是否是这里的问题。

<div class="form-group">
        <asp:Label runat="server" AssociatedControlID="ddlFaculty" CssClass="col-md-2 control-label">Faculty</asp:Label>
        <div class="col-md-10">
           <asp:DropDownList ID="ddlFaculty" EnableViewState="true" class="form-control" CausesValidation="false" runat="server"  autopostback="true" aria-expanded="true" ValidationGroup="g4"  OnSelectedIndexChanged="ddlFaculty_SelectedIndexChanged">
                <asp:ListItem Value="null">Select Faculty</asp:ListItem>
                    <asp:ListItem Value="Arts">Faculty of Arts</asp:ListItem>
                    <asp:ListItem Value="Business">Faculty of Business</asp:ListItem>
                    <asp:ListItem Value="Health">Faculty of Health</asp:ListItem>                      
                    <asp:ListItem Value="Industries">Faculty of Service Industries</asp:ListItem>
                    <asp:ListItem Value="Trades">Faculty of Trades</asp:ListItem>
                    <asp:ListItem Value="Maori">Te Wananga Maori</asp:ListItem>
            </asp:DropDownList>
            <asp:RequiredFieldValidator runat="server" ControlToValidate="ddlFaculty" ValidationGroup="g4"
                CssClass="text-danger" Display="Dynamic" ErrorMessage="The faculty field is required." />                
        </div>
    </div>

    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="ddlCourse" CssClass="col-md-2 control-label">Course</asp:Label>
        <div class="col-md-10">
            <asp:UpdatePanel runat="server" id="UpdatePanel1" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Label runat="server" id="lblfaculty"></asp:Label>
                    <asp:DropDownList runat="server" CssClass="form-control" ID="ddlCourse" ValidationGroup="g7" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="ddlFaculty" EventName="SelectedIndexChanged"/>
                </Triggers>
            </asp:UpdatePanel>
            <asp:RequiredFieldValidator runat="server" ControlToValidate="ddlCourse" ValidationGroup="g7"
                CssClass="text-danger" Display="Dynamic" ErrorMessage="The course field is required." />                
        </div>
    </div>

【问题讨论】:

    标签: c# asp.net ajax


    【解决方案1】:

    尝试使用UpdatePanelAsyncPostBackTrigger 属性。

    见:How to stop UpdatePanel from causing whole page postback?

    您是否尝试在 Triggers 部分将 Button1 设置为 AsyncPostBackTrigger,将 ChildrenAsTriggers 属性设置为 true 并将 UpdateMode 属性设置为 Conditional

    其他解决方案:

    User control inside update panel causing full page postback

    如果您的 UpdatePanel 无法将其内容呈现到 a(例如,当它位于 内部时),则会发生完整的回发。所以检查你在 UpdatePanel 中的 html,你可能会在那里找到答案(另外,寻找一些不正确的 xhtml,比如不正确地关闭的元素)。

    UpdatePanel causes full page postback

    除非您知道您的网站在 XHTML 模式下运行时存在的已知问题(并且您还没有时间修复),否则我始终建议您从 web.config 文件中删除该部分(或者您可以明确地将其设置为“过渡”或“严格”)。

    这将使您的 HTML 输出标准符合要求。除其他外,这将导致来自服务器控件的 HTML “格式正确”——这意味着打开和关闭标记元素始终匹配。当您使用 AJAX 技术动态替换页面上某些 HTML 元素的内容时,这一点尤其重要(否则客户端 JavaScript 有时会混淆容器元素并可能导致错误)。它还将确保 ASP.NET AJAX 在您的网站上正常工作。

    【讨论】:

    • 感谢您的评论,但在阅读文章后仍然导致整页回发
    【解决方案2】:

    事实证明,该页面实际上是在发送部分回发,但当收到回发时,我误将滚动到页面顶部

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2014-07-30
      相关资源
      最近更新 更多