【问题标题】:How can I get UpdatePanel to work for multiple buttons?如何让 UpdatePanel 为多个按钮工作?
【发布时间】:2019-02-26 15:20:30
【问题描述】:

我有一个有多个按钮的应用程序。每次单击按钮时,我都试图防止页面重新加载(这会干扰其他控件),因此我将代码的主要部分包装在 <asp:UpdatePanel><ContentTemplate></ContentTemplate></asp:UpdatePanel> 中。我已经查看了涉及在 </ContentTemplate> 之后使用 <Triggers><asp:AsyncPostBackTrigger>... 的单个按钮的多个解决方案,但这并不能解决我的问题。根据一些solutions,我正在使用AjaxControlToolkit(我已将using AjaxControlToolkit; 添加到我的C# 文件中)以及ModalPopExtender,这似乎会影响UpdatePanel 的行为。在不发布整个应用程序(很长)的情况下,这里是当前代码(aspx 和 C#)的基本布局以及我迄今为止尝试过的内容。关于我做错了什么有什么建议吗?

ASPX

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
    <ContentTemplate>
        <div class="container" id="table_controls_section" style="margin-top: 20px; width: 100%;">
            <div class="row" style="width: 100%;">
                <table style="border-style:solid; border-color: darkblue; border-width:thin; border-bottom-width: 0px; width:100%;">                     
                    <tr>
                      <th style="text-align: center;">Requestor Info</th>
                    </tr>
                    <tr>
                      <td style="padding: 5px; text-align: center; width: 100%;">
                        <asp:Button ID="uxTicketHistoryButton" runat="server" Text="Show Ticket History"  style="color: blue;" OnClick="uxTicketHistoryButton_Click"/>&nbsp;
                         <asp:Button ID="uxUseContactInfoButton" runat="server" Text="Use Contact Info" style="color: blue;" OnClick="uxUseContactInfoButton_Click" />
                      </td>
                  </tr>
                </table>
            </div>
        </div>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="uxUseContactInfoButton" />
        <asp:AsyncPostBackTrigger ControlID="uxTicketHistoryButton" />
    </Triggers>
</asp:UpdatePanel> 

C#

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AjaxControlToolkit;
namespace BCA_TicketManagement
{
    public partial class Summary : Page
    {
       ....
      protected void uxTicketHistoryButton_Click(object sender, EventArgs e)
      { ....
      }
      protected void uxUseContactInfoButton_Click(object sender, EventArgs e)
      { ....
      }
    }
}

到目前为止我尝试过的事情: 1) 在 C# 代码中添加using AjaxControlToolkit;。它也显示在我的参考文献中。 2) 将UpdateMode="Conditional" ChildrenAsTriggers="true" 添加到我的asp:UpdatePanel。还尝试更改ChildrenAsTriggers="false"。没有不同。 3) 尝试通过使用ControlID 为该按钮添加&lt;Triggers&gt;&lt;asp:AsyncPostBackTrigger...&gt; 来使UpdatePanel 为单个按钮工作。不用找了。 4) 将xmlns:asp="#unknown" 添加到&lt;asp:AsyncPostBackTrigger...&gt;。抛出错误AsyncPostBackTrigger has no property 'xmlns:asp="#unknown"' 注意此页面加载在Master.site使用&lt;asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"&gt;&lt;form&gt;标签内。

【问题讨论】:

    标签: c# asp.net button updatepanel page-refresh


    【解决方案1】:

    您应该将EventName 提供给您的触发器,如下例所示:

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

    我希望这能解决您的问题。

    【讨论】:

    • 这看起来很有希望。我添加了EventName="Click",但每次单击按钮时它仍在重新加载页面。
    • 您正在更新页面的哪些内容?是在您的UpdatePanel 中还是在UpdatePanel 之外?
    • 内容本身(包括按钮)在UpdatePanel内(如上图)。这不正确吗?
    • 我没有看到您在代码中更新的任何区域。您必须包装所有代码,它不会刷新您的页面,但会更新 UpdatePanel ContentTemplate 的区域。
    • 对,我没有在示例中发布整个应用程序,因为它太长了,但基本上所有内容都包含在 &lt;asp:UpdatePanel...&gt;&lt;ContentTemplate&gt; ... code here...&lt;/ContentTemplate&gt;&lt;/asp:UpdatePanel&gt; 中,所以我不确定它为什么不起作用。
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 2011-04-30
    • 1970-01-01
    • 2019-08-12
    • 2015-06-14
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多