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

时间:2016-06-23 16:24:51

标签: c# asp.net page-refresh

我只是想通过制作一个简短的原型来测试UpdatePanel功能以在链接按钮单击时禁用ASP.NET页面重新加载来缩短this question's example。我在像this这样的问题中看到了这种方法。为了测试这个,我创建了一个新的ASP.NET WebForms应用程序,添加了一个由UpdatePanel包围的ASP LinkBut​​ton。我在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点击是否重新加载页面的好方法吗?

3 个答案:

答案 0 :(得分:1)

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

正如techspider所提到的,你需要指定一个回发触发器。所以你的例子应该是这样的。

<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>

答案 1 :(得分:1)

如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仍会显示其原始文字。

答案 2 :(得分:1)

我发现当我在更新面板中使用LinkBut​​ton时,页面正在进行回发(页面在浏览器中完全刷新)除非我指示 ID LinkBut​​ton控件上的ClientIDMode =“AutoID”