【问题标题】:.NET Public Events not wiring up in nested web user controls.NET 公共事件未在嵌套 Web 用户控件中连接
【发布时间】:2011-05-14 23:57:42
【问题描述】:

我有一个 C# Web 应用程序,它有一个托管用户控件 (Review.ascx) 的 aspx 页面。在该用户控件内还有 5 个用户控件,其中一个具有公共事件 (Review_Summary.ascx)。问题是无论我做什么,我都无法在父 ascx 控件 (Review.ascx) 中连接事件。

这是我在子控件中的内容 (Review_Summary.ascx)

    public event EventHandler forwardStatusChanged;

    #region methods

    protected void btnForward_Click(object sender, EventArgs e)
    {
        if (btnForward.Text == "Return")
        {
            if (forwardStatusChanged != null)
            {
                forwardStatusChanged(sender, e);
            }
            removeForward();
        }
    }

在父控件 (Review.ascx) 我有这个

   public void initReview(string EmployeeNumber)
    {
         RevSummary.forwardStatusChanged += new EventHandler(RevSummary_forwardStatusChanged);

          <more code here>
     }

 protected void RevSummary_forwardStatusChanged(object sender, EventArgs e)
        {
            lblReadOnly.Visible = false;
        }

RevSummary是父控件中子控件的ID。 InitReveiw 是 aspx 页面在其 Page_Load 事件中调用的方法。

我在编译或运行时都没有错误。但是当我单击按钮时,forwardStatusChanged 事件为空。之后调用的“removeForward()”方法正确执行。因此,事件始终为空的事实使我相信父控件中的连接不起作用。但是,我确信它正在执行,因为执行之后的所有代码。

我怎样才能弄清楚为什么这个事件没有连接起来?

【问题讨论】:

  • 您需要在页面生命周期的早期绑定您的事件。当它们被绑定时,事件管道已经确定该事件没有事件处理程序。
  • 我应该在什么时候绑定它们?在 Page_Init 上?还是 Page_PreInit?或者还有什么地方?
  • 我试过初始化。 PreInit 在用户控件中不可用。我还注意到,如果我单击按钮两次,事件就会正确触发。所以它需要两次回发才能工作。
  • 尝试初始化。它适用于第二次回发的事实让我想知道您是否将它放在 a: if (IsPostBack){ // register event }

标签: asp.net events public


【解决方案1】:

从哪里调用 initReview?你确定它被调用是因为发生这种情况的唯一原因是事件处理程序没有真正设置。除了这个,我从来没有找到其他原因,我自己做了几次。

HTH。

【讨论】:

  • 它是从 aspx 页面调用的。是的,我 100% 肯定它会被调用,因为在执行wireup 之后会调用其他代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 2018-08-06
  • 2012-03-03
相关资源
最近更新 更多