【问题标题】:Panel visible=true has no effect面板可见=真没有效果
【发布时间】:2011-02-02 02:39:08
【问题描述】:

我有一个面板,我正在明确设置visible=true。调试器越过该行,visible 在下一行仍然计算为False。结果,显然没有显示面板。这怎么可能?

pnlValidate.Visible = true;
if (IsPostBack) return;
<asp:Panel ID="pnlValidate" runat="server">
    <asp:Button cssclass="submit2" ID="btnValidate" runat="server" Visible="false" text="Validate" OnClick="btnValidate_Click" /> <br />
    <asp:TextBox ID="txt6sql" runat="server" Visible="false" TextMode="multiLine" Width="500" Height="200" ReadOnly="true" ToolTip="Report SQL Statement" />
</asp:Panel>

ASP.NET 2.0,没有其他线程或“应该”与我的成员混淆的错误勘误表。

【问题讨论】:

    标签: asp.net visibility


    【解决方案1】:

    您的面板是否嵌套在另一个面板或任何其他将 Visible 设置为 false 的容器类型中?

    对于这种情况,您观察到的行为是可重现的。如果外部容器不可见,则禁止将内部容器的可见性设置为 true 是有意义的,因为这意味着内部的任何内容都必须可见,即使内部面板的空 div 也不可见。

    Visible 属性似乎依赖于外部容器的可见性,例如:

    <asp:Panel ID="Panel0" runat="server" Visible="false">
        <asp:Panel ID="Panel1" runat="server" Visible="false">
            Content...
        </asp:Panel>
    </asp:Panel>
    

    此代码符合预期(先使外部容器可见,然后使内部容器可见):

    Panel0.Visible = true;
    // Now Panel0.Visible returns true and Panel1.Visible returns false
    Panel1.Visible = true;
    // Now Panel0.Visible returns true and Panel1.Visible returns true
    

    这段代码有些出人意料(先让内部容器可见,再让外部容器可见):

    Panel1.Visible = true;
    // Now Panel1.Visible returns false (!, your issue) and Panel0.Visible returns false
    Panel0.Visible = true;
    // Now Panel1.Visible returns true (!!) and Panel0.Visible returns true
    

    似乎设置和获取 Visible 属性是“不对称的”:Setter 似乎在控件中放置了一个标志,但 Getter 返回一个计算值,该值取决于外部元素的可见性和控制自己。

    不确定这是否会对您有所帮助。

    【讨论】:

    • 正确答案,但行为愚蠢。我有条件在面板中显示各种元素(其中也包含静态元素),然后在其中任何一个可见时显示面板。这迫使我在每个项目的逻辑之前用不可读的布尔表达式显示面板。
    • 这是一个老问题,但我无缘无故地遇到了同样的行为——除了页面有两个 UpdatePanel,甚至这个面板停留在它们之间(在它们之间)面板也没有启动。我不得不将 PANEL 放在 UpdatePanel 之一中... VS2017。
    【解决方案2】:

    默认面板没有边框。您的面板在那里,您只是看不到它,因为它是空的。设置borderwidth="1",你会看到你的空白面板。

    【讨论】:

    • 但是 pnlValidate.Visible = false
    【解决方案3】:

    问题已解决:当我从子控件中删除 visible="false" 时,面板变得可见。

    【讨论】:

    • 其他东西必须设置它的可见性,否则调试器会出现问题。您是否在呈现的 HTML 中看到带有此面板的客户端 ID 的
      ?如果是这样,它就在那里。
    • @nickyt:请记住,设置和获取属性并不是为对象中的公共数据字段分配值。它是调用方法;无法保证“get”方法返回的值与您使用“set”设置的值相同。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签