2011-05-25 80 views
0

我有是假設修改主網頁上的文本框的值的內容網頁上的按鈕。設置很簡單。ASP.NET:主後呈現的內容已經呈現

內容頁 - 代碼背後 - 按鈕單擊處理程序:

protected void but_mybutton_Click(object sender, EventArgs e) 
{ 
    string new_value = "!!"; 
    Master.textbox_value(new_value); 
} 

的問題是,到時候就得到這個函數,大師的頁面已經呈現。要獲得顯示的新值,我需要重新刷新頁面。無論如何,明確告訴頁面重新渲染,因爲我已經改變了它的控件的一些值,而不必重新刷新頁面?

回答

2

母版頁呈現確實像它的頁面上的控制。 此博客文章向您顯示整頁生命週期,包括母版頁的事件。

http://weblogs.asp.net/ricardoperes/archive/2009/03/08/asp-net-page-events-lifecycle.aspx

從你提供這應該工作作爲按鈕的onclick處理程序的代碼獲取母版的的OnPreRender之前執行。你能告訴我們什麼代碼

Master.textbox_value(new_value); 

呢?

我只是用最簡單的安裝測試這一點。在masterpage 1標籤和設置標籤文本的方法上。

public partial class SiteMaster : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) {} 

    public void SetLabelText(string text) { 
     this.Label1.Text = text; 
    } 
} 

在內容頁面上有一個按鈕。按鈕的onclick處理程序調用masterpage上的方法。

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) {} 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     ((SiteMaster)this.Master).SetLabelText("foo"); 
    } 
} 

這將標籤的文本設置爲與預期相同的回發。

+0

你是對的,我用你的代碼對它進行了測試,它工作得很好。事實證明,我與我的代碼沒有設置文本值的邏輯錯誤。謝謝您的幫助。 – Bill 2011-05-25 22:26:29

2

您需要檢討ASP.NET Page Life Cycle以獲得更好的瞭解事件是如何燒製的。

最好的辦法是嘗試頁OnInit or LoadViewstate事件的設定值。

+1

很好的回答。我會指出,主頁實際上是頁面的控制,而不是其他方式;)是的,違反直覺,我知道... – 2011-05-25 20:25:15

+0

據我瞭解的代碼,該值必須設置,當按鈕是點擊。因此它不應該在OnInit事件中設置。我相信@ nickvane的回答是正確的。整個頁面在控制事件發生後(例如點擊)呈現。 – slfan 2011-05-25 21:36:17