2013-04-12 16 views
0

我有類似下面的形式:的觀點務實點ASP.NET的頁面週期

<form id="form1" runat="server"> 
<div> 
    <asp:PlaceHolder ID="plcHolder" runat="server">   
    </asp:PlaceHolder> 

    <asp:Button ID="btnSubmit" Text="submit" runat="server" 
     onclick="btnSubmit_Click" /> 
</div> 
</form> 

這裏是我的代碼:

protected string FetchDataFromDatabase() 
{ 
    return "some long string"; 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.plcHolder.Controls.Add(new Label() { Text = FetchDataFromDatabase() }); 
    } 
} 

Page_Load()從數據庫中獲取的長字符串。

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    this.plcHolder.Controls.Add(new Label() { Text = "new text" }); 
} 

我的Button將新的文本添加到我的頁面。但是,當我點擊按鈕時,我只看到字符串「新文本」,但我正在尋找兩個文本(「一些長串新文本」)。

因爲文本已經加載到頁面,所以我不想在每次點擊按鈕時調用我的數據庫。我如何實現這一目標?

我知道這個例子看起來有點奇怪,這是因爲我試圖給出最小的工作示例。

+0

'FetchDataFromDatabase()'實際上是否返回一個字符串? –

+0

您是否嘗試在Page.IsPostBack塊中放置斷點以確保它正在執行時沒有錯誤? – rivarolle

+0

@BradM,不,它獲取用戶定義的對象列表。我正在使用這些數據和新的控件填充'佔位符'。 – Sait

回答

0

在負載,當你從數據庫中獲取的價值,將其存儲在會話:

Session["textFromDatabase"] = GetTextFromDatabase(); 

,然後利用在這兩個地方該值。所以,如果你在點擊,你會說:

... Text = Session["textFromDatabase"] + " new text"; 

,現在你可以從數據庫中的值時,它不是一個回,只有一次像你說的,但遍地利用它。

而且我很確定,根據你所說的,這是你想要的狀態的倒數,扔出來!在它前面:

if (Page.IsPostBack) 
+2

OP正在添加新的控件,而不是追加到現有的控件。 –

+0

@Tim S. Van Haren已經提到過,我需要在我的真實案例中使用新控件。 – Sait

+0

@zagy,請參閱我的編輯。 –