2010-07-24 86 views
1

我是一个学习一些.NET的PHP人。我正在修改UpdatePanel控件的一个小仪表盘。ASP.NET更新面板更新一次 - 然后什么都不做

在.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(); 

     } 

我需要在控制复位的东西吗?

谢谢!

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

回答

2

从UpdatePanel中取出,甚至在onload并添加以下代码在关闭之前UpdatePanel的。

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

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

此链接是从www.asp.net一个伟大的介绍如何使用的UpdatePanel和触发器:http://www.asp.net/ajax/tutorials/understanding-asp-net-ajax-updatepanel-triggers

编辑:你的问题可能与在UpdatePanel1_Increment计数器变量。每次回发时,计数器变量都将重置为0.所以,UpdatePanel正在正确更新,只是每次更新0 + 1 = 1。 UpdatePanels创建同步更新的错觉,但更新实际上是异步发生的,并且变量不由服务器维护。您需要一些方法来告诉后面的代码,因为计数器值在更新UpdatePanel后立即“遗忘”,计数器的新值已更新。

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

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”时,页面加载和一切,你希望它会奏效。

+0

按钮的OnClick属性不应该调用CodeBehind中的脚本并更新标签吗?我提出了你的推荐修改,但没有任何改变。 – tpow 2010-07-24 17:03:45

+0

是的,你不应该用Button1改变任何东西。如果你在UpdatePanel1_Increment中放置一个断点,你是否能够击中断点。 另外,你在做任何的PageLoad方法内的东西? – 2010-07-24 17:09:34

+0

另外,我只是更仔细地看着你的代码。你可以分享“UpdatePanel1_Load”方法的代码吗? – 2010-07-24 17:12:16