单击按钮会在第一次单击时触发整页回发

本文关键字:单击 按钮 第一次 | 更新日期: 2023-09-27 18:15:16

尽管我已经把我的asp:Button放在一个UpdatePanel中,它仍然会在第一次点击时触发整个页面的回发。此外,OnClick事件并没有被捕获的第一次我点击按钮,但每一次之后,一切都很好。

你知道是什么导致了这个问题吗?请看下面的代码:

(在我的网站。主文件)

<asp:ScriptManager runat="server" AjaxFrameworkMode="Enabled" EnablePartialRendering="true" ValidateRequestMode="Disabled">
</asp:ScriptManager>

(在我的实际网页中)

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Editor.aspx.cs" Inherits="Technology.WebForm1"
validateRequest="false" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<textarea id="htmlTexarea" runat= "server" style="height: 90%"></textarea>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="testBtn" EventName="Click" />
    </Triggers>
    <ContentTemplate>
        <asp:Button ID="testBtn" style="" runat="server" ClientIDMode="Static" OnClick="testBtn_Click" UseSubmitBehavior="false" />
    </ContentTemplate>
</asp:UpdatePanel>
</asp:Content>

我的c#代码是:

protected void Page_Init(object sender, EventArgs e) {
        testBtn.Click += testBtn_Click;
    }
protected void Page_Load(object sender, EventArgs e)
    {
    }
protected void testBtn_Click(object sender, EventArgs e)
    {
        String test = "Helloworld";
    }

我有什么遗漏或做错的吗?

编辑:我在后面的c#代码中添加了以下内容:

 protected void Page_Load(object sender, EventArgs e)
    {
        //Should return POST, returns GET on first click
        String test = Request.HttpMethod;
        if (!IsPostBack)
        {
            //stops here first time
            String hello = "Hello world";
        }
        else { 
            //should stop here
            String hello = "Hello world";
        }
    }

我第一次单击按钮,服务器正在获得GET请求,IsPostBack返回false,不改变任何其他单击发送POST请求,IsPostBack为真。有人知道是什么引起的吗?

单击按钮会在第一次单击时触发整页回发

问题是由于我使用Server.Transfer(...)从另一个页面到这个页面的事实引起的,我不完全确定如何,但这影响了页面第一次发送的POST请求,但一旦页面在请求后重新加载,一切都工作了。在我的主页中,我将代码更改为Response.Redirect(...),现在它可以完美地工作。如果这不是最清晰的解释,我很抱歉,但说实话,我不太确定为什么这样解决了问题,如果有人能在评论中澄清到底发生了什么,我将非常感激。