我在用户控件中有一个标签:
<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。
答案 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");
}
}