简体   繁体   English

UserControl外的页面中的控件未在PreRender上更新

[英]Controls in page outside UserControl not updating on PreRender

Here is my code: 这是我的代码:

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

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

myControl.ascx.cs 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 myPage.aspx.cs

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

In debug mode, i can see my new value "second label" but it's not rendering in the page. 在调试模式下,我可以看到我的新值“第二个标签”,但它不在页面中呈现。 Any advice ? 有什么建议吗?

You can't set the value on post-back in pre-render, because after this event the page applies the ViewState to the control, changing its value. 您无法在pre-render中设置回发时的值,因为在此事件之后,页面会将ViewState应用于控件,从而更改其值。 So you are setting it too early. 因此,您设置得太早了。 A better idea would be the Page Load event. 更好的主意是页面加载事件。

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

Try doing soemthing like this : 尝试做这样的事情:

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";
     }
 }

:) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM