2016-12-05 31 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"; 
    } 
} 

:)

相关问题