【问题标题】:Button click triggers full page postback on first click按钮点击在第一次点击时触发整页回发
【发布时间】:2014-09-19 12:03:48
【问题描述】:

尽管我已将我的 asp:Button 放置在 UpdatePanel 中,但它仍然会在第一次单击时触发整个页面的回发。此外,我第一次单击按钮时也没有捕获 OnClick 事件,但之后每次都正常。

任何想法可能导致此问题?请参阅下面的代码。

(在我的 Site.Master 文件中)

<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 为 true。有谁知道是什么原因造成的?

【问题讨论】:

  • 这很可能是因为UseSubmitBehavior=false
  • 您可以通过删除触发器部分来尝试它。只需删除触发器部分并尝试一次。我从不使用触发器部分来单击 updatePanel 中的简单按钮。因此我问。同时删除 Pre_init 中添加的额外 Click 事件。不知道为什么需要这样做
  • @WiktorZychla 不,只是把那条线拿出来了,但还是不行,谢谢
  • @trelston 删除了触发器部分并注释掉了我在那里添加事件处理程序的行,但我仍然遇到同样的问题,第一次点击不起作用,之后的所有其他点击都可以
  • 在同一页面上是否还有另一个 id 为 testBtn 的按钮?我也没有 AjaxFrameworkMode="Enabled" EnablePartialRendering="true" ValidateRequestMode="Disabled"。尝试删除它们并检查。

标签: c# asp.net webforms aspbutton


【解决方案1】:

问题是由于我使用 Server.Transfer(...) 从另一个页面转到此页面这一事实引起的,我不完全确定如何,但这会影响页面第一次发送的 POST 请求,但一旦页面在请求一切正常后重新加载。在我的母版页中,我将代码更改为Response.Redirect(...),它现在可以完美运行。抱歉,如果这不是最清楚的解释,但老实说,我不太确定为什么这解决了问题,如果有人能澄清 cmets 中发生的事情,我将不胜感激。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多