Label的visible属性仅作为只读

时间:2013-10-07 16:11:17

标签: c# asp.net

我在用户控件中有一个标签:

<asp:Label runat="server" ID="lblRemainingPlacesMessage" Visible="false" />

我想将其可见性设置为true:

protected void Page_Load(object sender, EventArgs e) {
    lblRemainingPlacesMessage.Visible = true;
}

但是,标签仍然是隐藏的。

让我感到困惑的是,即使在即时窗口或调试器本地监视下,该属性也无法更改:

(即时窗口)

lblRemainingPlacesMessage.Visible
false
lblRemainingPlacesMessage.Visible = true
true
lblRemainingPlacesMessage.Visible
false

什么可以解释我的Visible属性无法更改?

我也不例外。只是一个类似操作的NOOP ......

我的应用已启用视图状态。最重要的是,我在页面中有其他标签,完美无缺!

不知道是否有问题,但我使用以下命令在我的所有者页面中动态实例化我的用户控件:

    protected override void CreateChildControls()
    {
        m_VisualControl = (MyUserControl)Page.LoadControl(_ascxPath);
        Controls.Add(m_VisualControl);
    }

该应用程序使用ASP.Net WebForms和.net 3.5 SP1,我使用Visual Studio 2012 Premium。

2 个答案:

答案 0 :(得分:1)

Yuriy Galanter的评论让我走上正轨。

简单地说,我的直接父母不可见。而且我认为控件的可见属性结合了控件祖先的可见性。

有时简单问题的解决方案很简单:)

答案 1 :(得分:0)

1)您应该在 OnInit 上创建任何动态 UserControl ,否则您将无法使用ViewState

2)将您不想更改的label属性公开为UserControl

的属性
public bool HiddeMyLabel
{
   set { lblRemainingPlacesMessage.Visible = value; }
   get { lblRemainingPlacesMessage.Visible; }
}

3)您应该使用页面中的 OnPreRender 来更改任何控件属性。

protected override void OnPreRender(EventArgs e)
{
    MyUserControl.HiddeMyLabel = false; 
}

4)如果仍有问题,请手动删除隐藏属性:

public bool HiddeMyLabel
{
   set 
   { 
     if(value)
       lblRemainingPlacesMessage.Attributes.Add("style", "display:none");
     else
       lblRemainingPlacesMessage.Attributes.Add("style", "display:block");
   }
}