仍在呈现隐形控件

时间:2009-01-28 23:29:23

标签: c# .net asp.net

我遇到了最奇怪的问题。

我在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  

任何想法如何发生(以及如何解决)?

非常感谢,

迈克尔

3 个答案:

答案 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 %>" />

然后对它们进行数据绑定以使表达式得到评估。