【问题标题】:ASP.NET update panel updates once - then does nothingASP.NET 更新面板更新一次 - 然后什么也不做
【发布时间】:2010-07-24 16:24:30
【问题描述】:

我是一名 PHP 人,正在学习一些 .NET。我正在为一个小仪表板修改 UpdatePanel 控件。

在 .aspx 文件中,我使用 OnClick 触发文件后面的代码以 +1 更新标签

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div id="Container">
<asp:UpdatePanel runat="server" ID="UpdatePanel1" 
    OnLoad="UpdatePanel1_Load">
  <ContentTemplate>
      <asp:Label ID="CounterOne" runat="server" Text="Label"></asp:Label>
  </ContentTemplate>

</asp:UpdatePanel>

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="UpdatePanel1_Increment"/>

但是,当我在本地主机上运行它时。当我第一次按下按钮时它会增加,但随后的每次单击都不会执行任何操作。

这是代码隐藏:

 public void UpdatePanel1_Increment(object sender, EventArgs e)
        {
            counter = counter + 1;
            CounterOne.Text = counter.ToString();

        }

我需要在控件上重置一些东西吗?

谢谢!

注意:我知道有更多带宽友好的方法可以做到这一点,但我只是在测试一些想法......

【问题讨论】:

    标签: asp.net-ajax


    【解决方案1】:

    从 UpdatePanel 中移除 OnLoad,并在关闭 UpdatePanel 之前添加以下代码。

    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
    </Triggers> 
    

    通过添加触发器,您是在告诉 ScriptManager 在单击 Button1 时更新此 UpdatePanel。

    此链接是来自 www.asp.net 关于如何使用 UpdatePanels 和触发器的精彩介绍:http://www.asp.net/ajax/tutorials/understanding-asp-net-ajax-updatepanel-triggers

    编辑:您的问题可能与 UpdatePanel1_Increment 中的计数器变量有关。每次回发时,计数器变量都会被重置为 0。因此,UpdatePanel 正在正确更新,只是每次都使用 0 + 1 = 1 进行更新。 UpdatePanel 会产生同步更新的假象,但实际上更新是异步发生的,并且服务器不维护变量。您需要某种方式告诉代码后面的代码,因为在更新 UpdatePanel 后计数器值立即被“遗忘”,所以 counter 的新值已更新。

    有很多方法可以将计数器值传递给服务器。一种快速简便的方法如下:

    public void UpdatePanel1_Increment(object sender, EventArgs e)
            {
                counter = int.Parse(CounterOne.Text); //This is how we'll tell the server what the counter value currently is.
                counter = counter + 1;
                CounterOne.Text = counter.ToString();
    
            }
    

    最后,确保在页面加载时 CounterOne.Text = "0" 并且一切都会按您的预期工作。

    【讨论】:

    • 按钮的OnClick属性不应该调用CodeBehind中的脚本并更新标签吗?我做了您推荐的更改,但没有任何更改..
    • 是的,您不应该使用 Button1 更改任何内容。如果您在 UpdatePanel1_Increment 中放置一个断点,您是否能够命中该断点。另外,你在 PageLoad 方法中做了什么吗?
    • 另外,我只是更仔细地查看了您的代码。你能分享“UpdatePanel1_Load”方法的代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多