1

我的应用程序中有一个 System.Web.UI.UserControl 用于向用户显示消息,但是在这些消息显示给用户之后,一旦我希望它们清除(有条件地)。

我现在尝试开始工作的简化代码如下:

protected override void OnUnload(EventArgs e) {
if (_resetOnUnload) {
    divMessageBlock.InnerHtml = "";
    _resetOnUnload = false;
}
base.OnUnload(e);
}

但是,在 OnUnload 事件中对视图的任何更改都不会在下一页加载(表单提交)时转移。

我的问题是如何设置此用户控件以在任何消息可以添加到其他位置之前或在为用户呈现页面并保持这种状态之后清除自身?

4

3 回答 3

1

在关闭 ViewState 的情况下将消息输出到控件怎么样?这样,您的消息将被显示,并且任何后续回发都将清除该消息。

于 2012-05-28T20:05:04.300 回答
1

尝试这个。将视图状态设置为保存_resetOnUnload,然后加载它。OnLoad 可以保持不变,测试是否清除。

protected override void OnLoad(EventArgs e) {
          base.OnLoad(e);

          if (_resetOnUnload) {
                 divMessageBlock.InnerHtml = "";
                 _resetOnUnload = false;
          }
   }

   protected override void LoadViewState(object savedState) {
          if (savedState != null) {
                 object[] myState = (object[])savedState;
                 _resetOnUnload = (bool)myState[0];
          }
   }

   protected override object SaveViewState() {
          object[] allStates = new object[]{ _resetOnUnload };
          return allStates;
   }
于 2012-05-28T20:30:07.630 回答
0

我猜该OnPreRender事件是最后一个事件,您可以在其中更改控件的输出应该是什么。之后,控件已呈现,您的更改将无效。

于 2012-05-28T19:50:53.440 回答