【问题标题】:Update Panel is not working for button click, it reload page when click on button in asp.net更新面板不适用于按钮单击,单击 asp.net 中的按钮时会重新加载页面
【发布时间】:2021-11-15 19:37:15
【问题描述】:
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="updatePanel2" runat="server" ChildrenAsTriggers="true">
        <ContentTemplate>
            <asp:Button ID="btnBlock" Text="BlockCalls" runat="server"
                OnClick="btnBlock_Click" Enabled="True" Width="100px" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnBlock" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>

当我点击 btnBlock 页面加载时,甚至会触发。当用户点击按钮时,我不希望页面刷新

【问题讨论】:

  • 您仍然总是会收到部分页面回发,并且每次更新面板都会触发页面加载事件 - 就像更新面板外的任何按钮一样。因此,对于第一页设置代码,您的页面加载事件应该具有 IsPostBack = false。所以 IsPostBack=False 代码存根中的代码仅在第一次运行。那么,虽然整个页面不会重新刷新,并且整个页面都不会重新发布?您仍然会得到所谓的“部分”页面回发 - 虽然只有面板内的内容被回发到服务器?标准表单事件仍然每次触发,包括页面加载。

标签: asp.net updatepanel


【解决方案1】:

因此,如果您将触发器放在按钮单击上,则单击它以回发并刷新页面是正常的。 如果你想回发而不刷新页面,你应该有这样的东西:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="updatePanel2" runat="server">
    <ContentTemplate>
        <asp:Button ID="btnBlock" Text="BlockCalls" runat="server" 
            OnClick="btnBlock_Click" Enabled="True" Width="100px" />
    </ContentTemplate>
</asp:UpdatePanel>

无论哪种方式,您的 Page_Load 事件都会被触发,但您可以这样做:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //this is page load
    }
    else{
        //this is PostBack
    }
}

【讨论】:

  • 当我们点击按钮时有什么办法,页面加载事件不应该调用。因为我已经从后面的代码动态创建了一些控件。当页面重新加载时,我丢失了之前创建的控件。
  • @Swap 你必须在每次回发中重新创建那些动态创建的控件。
  • @Swap 你必须重新创建它们。如果您可以避免在按钮单击后代码中的操作,那么您可以创建一个前端 HTML 元素并且不要在单击时回发(您使用 js 或类似的东西在前端运行操作)。这样 Page_Load 事件就不会触发。
【解决方案2】:

您仍然总是会收到部分页面回发,并且每次更新面板都会触发页面加载事件 - 就像更新面板外的任何按钮一样。

因此,对于第一页设置代码,您的页面加载事件应该有 IsPostBack = false。

所以 IsPostBack=False 代码存根中的代码只运行第一次。

那么,虽然整个页面不会重新刷新,整个页面也不会重新发布?您仍然会得到所谓的“部分”页面回发 - 虽然只有面板内的内容被回发到服务器?标准表单事件仍会在每次包括页面加载时触发。

您需要构建该页面来处理回发,而引入更新面板并不能解决此要求。

如果您的页面无法在回发后继续存在,那么它将无法处理更新面板。因此,更新面板不会阻止回发,但会导致我们称之为部分回发。

那么,假设你弹出一个 jQuery.UI(或引导程序)对话框,然后进行回发?然后,由于页面回发,该对话框将被炸毁。如前所述,更新面板仍然会进行回发,但不是整页,因此术语部分回发,因此任何服务器端按钮或该面板内部的任何回发?好吧,页面加载事件仍然每次都会触发。

那么,虽然一些 jQuery 和一些控件可以(并且将会)通过一个完整的页面回发来 zonkey?使用更新面板可以提供帮助吗?请记住,该更新面板中的服务器端事件仍会导致回发 - 只是不是整页的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2023-03-13
    • 2017-04-30
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多