3

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

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

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

4

2 回答 2

1

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

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

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

于 2013-10-08T08:12:30.540 回答
0

1)您应该在OnInit创建任何动态用户控件,否则您将无法使用:ViewState

2) 将您不想更改的标签属性公开为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");
   }
}
于 2013-10-07T16:57:33.957 回答