簡體   English   中英

回發后可以訪問 object - ASP.NET

[英]Can access a object after postback - ASP.NET

我真的對這種行為感到困惑。 誰可以給我解釋一下這個?

我有以下 class 結構:

public abstract BaseUserControl : System.Web.UI.UserControl
{
  public List<string> listFieldMapper = new List<string>();
}

  public partial class Property : BaseUserControl
  {
    protected override void OnInit(EventArgs e)
    {
      base.OnInit(e);

      base.listFieldMapper.Add("test");
    }
  }

在按鈕的事件處理程序中(導致回發),我可以訪問base.listFieldMapper

我的理解是,在回發之間,不維護 state,為了能夠維護 state,請使用 ViewState object。 列表如何維護這些值?

附帶說明一下,如果我在OnInit (例如:加載)之后設置base.listFieldMapper的值,則回發后我有一個 null object。

我認為當按鈕單擊調用回發時:

  1. 當服務器處理請求時,正在實例化用戶控件的一個實例。
  2. 然后服務器調用處理按鈕單擊的方法。

請求頁面時(不處理按鈕單擊):

  1. 當服務器處理請求時,正在實例化用戶控件的一個實例。
  2. 然后服務器調用處理 Load 事件的方法。

ViewState 在這里不起作用。 要讓它跟蹤任何內容,您需要在其中實際放入一些內容(大多數默認屬性都可以)。

在您的情況下,第一種情況下的事件順序是(在 init 上設置列表):

Control.OnInit -> add value
Page.OnInit    -> value present
Page.OnLoad    -> value present
Control.OnLoad -> value present
#PostBack
Control.OnInit -> add value
Page.OnInit    -> value present
Page.OnLoad    -> value present
Control.OnLoad -> value present
Button.OnClick -> value present

在第二種情況下(設置加載列表):

Control.OnInit -> value absent
Page.OnInit    -> value absent
Page.OnLoad    -> value absent
Control.OnLoad -> add value
#PostBack
Control.OnInit -> value absent
Page.OnInit    -> value absent
Page.OnLoad    -> value absent
Control.OnLoad -> add value
Button.OnClick -> value present

並且 listFieldMapper 本身在 class 構造函數中被分配,並且在控件生命周期的任何時候都將是非空的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM