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 に答える