UpdatePanel 不会阻止按钮重新加载页面

UpdatePanel does not prevent button from reload page

我只是想做空 by making a short prototype to test the UpdatePanel functionality to disable ASP.NET page reload on linkbutton click. I have seen this approach in questions like this。为了对此进行测试,我创建了一个新的 ASP.NET WebForms 应用程序,添加了一个 ASP LinkBut​​ton,由 UpdatePanel 包围。我在 Visual Studio .cs 文件中为 OnClick 和 PageLoad 事件添加了断点。这是 ASP 文件中的代码:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:LinkButton ID="LinkButton1" OnClick="OnLinkClick" runat="server">Click me, no reload, I promise!</asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>

以及.cs文件代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        //page reload things...
    }

    protected void OnLinkClick(object sender, EventArgs e)
    {
        //on click thigs...
    }

每次我点击 LinkBut​​ton 时,触发的第一个断点是 PageLoad 断点,然后是 OnClick 断点。我认为使用 UpdatePanel 会避免这种行为。

我做错了什么,或者为什么我不应该期望 PageLoad 不会被调用?这是测试 LinkBut​​ton 单击是否重新加载页面的好方法吗?

即使您正在执行部分 post 返回,框架仍会执行包括 Page_Load 的页面生命周期。但是您只能在浏览器中对更新面板内的控件进行更改。

正如 techspider 提到的,您需要分配一个 post 后退触发器。所以你的例子应该是这样的。

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
   <asp:LinkButton ID="LinkButton1" OnClick="OnLinkClick" runat="server">Click me, no reload, I promise!</asp:LinkButton>
</ContentTemplate>
<Triggers>
  <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" /> 
</Triggers>
</asp:UpdatePanel>

正如Clint B所说,代码隐藏中回发事件的处理是正常的。您可以使用两个标签测试您的 UpdatePanel,一个在 UpdatePanel 内部,一个在 UpdatePanel 外部:

<asp:Label ID="lbl1" runat="server" Text="Label 1" BackColor="Aqua" />
<asp:UpdatePanel ID="up1" runat="server">
    <ContentTemplate>
        <asp:Label ID="lbl2" runat="server" Text="Label 2" BackColor="Yellow" />
        <asp:LinkButton ID="LinkButton1" runat="server" Text="Update, no reload!" OnClick="OnLinkClick" />
    </ContentTemplate>
</asp:UpdatePanel>

LinkBut​​ton 的事件处理程序更新两个标签:

protected void OnLinkClick(object sender, EventArgs e)
{
    lbl1.Text = DateTime.Now.ToString();
    lbl2.Text = DateTime.Now.ToString();
}

如果部分刷新有效,对 lbl2 所做的更改在页面中可见,而 lbl1 仍显示其原始文本。

我发现当我在更新面板中使用 LinkBut​​ton 时,页面正在执行回发(页面在浏览器中完全刷新)UNLESS 我指示一个 IDClientIDMode="AutoID" 在 LinkBut​​ton 控件上。