2014-09-29 85 views
0

我试图从自定义事件更改标签上的文本。当我通过按钮点击事件(Button1_Click)更新文本时,一切正常。但是,当我尝试更新自定义事件(ArReceiver_OnArDataUpdate)中的相同标签时,什么都不会发生。 ArReceiver_OnArDataUpdate正在被正确触发。ASP.NET在自定义事件中更改标签文本

为什么我的事件的反应与按钮单击事件不同?我需要做什么才能让我的活动有效?

这是一个开箱即用的VS2013网络项目。下面的代码更好地说明:

代码背后:

namespace WinReceiver 
{ 
    public partial class _Default : Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      ArReceiver.OnArDataUpdate += ArReceiver_OnArDataUpdate; 
     } 

     void ArReceiver_OnArDataUpdate(object sender, ArEventArgs e) 
     { 

      labelVoltage.Text = "Reset"; 
      UpdatePanel1.Update(); 
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      labelVoltage.Text = "Button Clicked"; 
      UpdatePanel1.Update(); 
     } 

    } 
} 

Default.aspx的:(本的Site.Master默认拥有的ScriptManager它)

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Label ID="labelVoltage" runat="server" Text="..."></asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 

编辑: 我做发现this question,说这是不可能的,但有人可以解释为什么这可能是不可能的?我也可以刷新页面,但是当我尝试Respone.Redirect时,我收到了异常。

+0

由于点击事件导致回发,这就是点击事件导致按钮标签改变的原因。有问题的事件不会这样做(这是一个猜测,因为我不熟悉这个事件)。您可以使用signalR,AJAX长轮询或其他技术来使服务器事件更新客户端,但我认为您的解决方案有点过于简单,无法按预期工作。 – SpaceBison 2014-09-29 15:57:47

回答

1

如果OnArDataUpdate是一个静态事件,很可能被解雇时,ASP.NET页面渲染过程是超出了范围,因此标签不存在的,因为它不是在页面的范围被处理(因为ASP.NET是无状态的)。但是,如果ArReceiver是页面上的控件,它应该处理得很好,并且问题可能在控件内或覆盖它(取决于事件何时触发,它可能会被viewstate覆盖)。

+0

这是非常古老的,但你的方向是正确的。我对网络表格的工作原理有很差的概念,但是我确实在这之后才发现它。 – 2014-11-21 23:34:37