【问题标题】:ASP.NET Change label text in custom eventASP.NET 更改自定义事件中的标签文本
【发布时间】:2014-09-29 15:50:08
【问题描述】:

我正在尝试通过自定义事件更改标签上的文本。当我通过按钮单击事件 (Button1_Click) 更新文本时,一切正常。但是,当我尝试在自定义事件(ArReceiver_OnArDataUpdate)中更新相同的标签时,什么也没有发生。 ArReceiver_OnArDataUpdate 正在正确触发。

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

这是 VS2013 中的一个开箱即用的 Web 项目。这是更好解释的代码:

代码背后:

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 时出现异常。

【问题讨论】:

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

标签: c# asp.net asp.net-ajax updatepanel


【解决方案1】:

如果 OnArDataUpdate 是一个静态事件,它可能会在 ASP.NET 页面呈现过程超出范围时触发,因此标签不存在,因为它不在正在处理的页面范围内(因为 ASP .NET 是无状态的)。

但是,如果 ArReceiver 是页面上的控件,它应该可以正常处理,并且问题可能在控件内或覆盖它的东西(取决于事件触发的时间,它可能会被视图状态覆盖)。

【讨论】:

  • 这很老了,但你的方向是正确的。我对 web 表单的工作原理的概念很差,但在此之后我确实弄明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多