2016-12-05 55 views
0

這裏是我的代碼:控制在外面頁面用戶控件不更新上的PreRender

<asp:Label ID="myLabel" runat="server" Text="first label"></asp:Label> 

<uc:myControl ID="myControl" runat="server" /> //contains a checkbox 

myControl.ascx.cs

public bool changeLabel { get; set; } 

protected void checkbox_CheckedChanged(object sender, EventArgs e) { 
    changeLabel = ((CheckBox) sender).Checked ? true : false; 
} 

myPage.aspx.cs

protected void Page_PreRender(object sender, EventArgs e) 
    { 
     if (Page.IsPostBack) 
     { 
      myLabel.Text = myControl.changeLabel == true ? "second label" : "first label"; 
     } 
    } 

在調試模式下,我可以看到我的新值「第二個標籤」,但它不在頁面中呈現。有什麼建議?

回答

0

您無法在預渲染中設置回傳值,因爲在此事件之後,頁面將ViewState應用於控件,並更改其值。所以你現在設置得太早。一個更好的主意是頁面加載事件。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Page.IsPostBack) 
     { 
      myLabel.Text = myControl.changeLabel == true ? "second label" : "first label"; 
     } 
    } 
+0

Page_Load事件Pre_Render之前和用戶控件的Page_Load中之前發生,所以也沒有任何意義,我分配在Page_Load中的價值 – Med

+0

@Med這是我的錯誤人,我將它讀爲Page_Init而不是Pre_Render,對此抱歉! – Seano666

0

嘗試這樣做soemthing這樣的:

protected void checkbox_CheckedChanged(object sender, EventArgs e) 
{ 
     Label l = (Label)this.Page.FindControl("myLabel"); 
     if (l != null && checkbox is checked) 
     { 
      l.Text = "second label"; 
     } 
     else 
    { 
      l.Text = "first label"; 
    } 
} 

:)

相關問題