我遇到了最奇怪的问题。
我在Master Page中有两个PlaceHolders;一个包含已注销用户的控件,另一个包含已登录用户的控件。
他们是:
plhLoggedOut
plhLoggedIn
在我的Page_Load(主页面)中,我设置了它们的可见性:
//LOGGED-IN?
plhLoggedOut.Visible = (app.UserID == 0);
plhLoggedIn.Visible = (app.UserID != 0);
但是,仍然会呈现两个PlaceHolders的内容。
我甚至将其可见性写入状态消息,并且该状态消息确认在任何给定时间只有一个可见。如,
plhLoggedOut.Visible == True; plhLoggedIn.Visible == False
任何想法如何发生(以及如何解决)?
非常感谢,
迈克尔
答案 0 :(得分:2)
也许在您的代码中的其他位置,您将这些面板的父控件设置为可见,这会破坏所有子项并将它们设置为可见。您需要更改代码,以便在其父控件之后设置plhLoggedOut和plhLoggedIn可见性。
答案 1 :(得分:2)
我刚删除了旧的PlaceHolders并创建了两个具有不同ID的新的PlaceHolders。然后它就开始工作了。
我依旧记得之前有类似奇怪的行为,由于某些原因,代码隐藏和标记断开连接。这可能是因为我没有使用可视化设计器,而是手工编写.NET标记和designer.cs文件。
FYI,slolife,我刚测试过它,并且可见性不会像从父控件到子控件那样传递下去。即使将容器的可见性设置为true,也可以嵌套隐藏的隐藏控件。
谢谢大家,
迈克尔
答案 2 :(得分:0)
你也打电话试试
<asp:PlaceHolder ID="plhLoggedOut" runat="server" Visible="<%# app.UserID == 0 %>" />
<asp:PlaceHolder ID="plhLoggedIn" runat="server" Visible="<%# app.UserID != 0 %>" />
然后对它们进行数据绑定以使表达式得到评估。