【问题标题】:Hiding and showing content in ASP.Net based on value基于值在 ASP.Net 中隐藏和显示内容
【发布时间】:2008-11-06 15:40:07
【问题描述】:

如果没有设置数据,我正在寻找一种优雅的解决方案,用于从 ASP.Net 页面中删除内容。让我再解释一下。

我在一个页面上有一些数据块,其中包含一些带有单独值的子部分。如果没有为其中一个值设置数据,我需要隐藏它(这样它就不会占用空间)。此外,如果没有设置子部分中的任何值,则也需要将其隐藏。最后,如果块/面板中没有任何子部分可见,那么我需要隐藏整个内容。

使用嵌套面板/DIV 实现布局

<Panel id="block">
    <Panel id="sub1">
        <Panel id="value1-1">blah</Panel>
        <Panel id="value1-2">blah</Panel>
    </Panel>
    <Panel id="sub2">
        <Panel id="value2-1">blah</Panel>
        <Panel id="value2-2">blah</Panel>
    </Panel>
</panel>

我想知道是否有人在不编写一堆嵌套的 If..Else 语句并且不创建一堆自定义控件的情况下实现这样的事情有任何体面的想法。无论我实现什么,都需要足够健壮以处理标记中的变化,而无需不断地操纵代码隐藏。

我希望有一种方法可以通过一些简单的标记更改(自定义属性)和对 PageLoad 或 PreRender 的递归函数调用来做到这一点。

非常感谢任何帮助。

编辑:

好吧,让这件事变得棘手的是子部分中可能还有其他控件,这些控件不影响控件的隐藏和显示。并且每个 value 面板都可能包含不影响是否显示的控件。示例:

<Panel id="sub2">
    <Image id="someImage" src="img.png" />
    <Panel id="value2-1">
        <Label>blah</Label>
        <TextBox id="txtValue" />
    </Panel>
    <Panel id="value2-2">blah</Panel>
</Panel>

这是一个过于简化的示例,但与我需要担心的相差不远。

【问题讨论】:

    标签: .net asp.net controls user-interface


    【解决方案1】:

    如果您可以编写函数来为每个组返回真/假,则可以避免递归遍历,例如

    <Panel id="block" runat="server" visible="<%=IsBlockVisible%>">
        <Panel id="sub1" runat="server" visible="<%=IsSubVisible(1)%>">
            <Panel id="value1-1">blah</Panel>
            <Panel id="value1-2">blah</Panel>
        </Panel>
        <Panel id="sub2" runat="server" visible="<%=IsSubVisible(2)%>">
            <Panel id="value2-1">blah</Panel>
            <Panel id="value2-2">blah</Panel>
        </Panel>
    </panel>
    

    【讨论】:

    • 不久前我在一个项目上做过同样的事情,效果很好。它使实现变得非常容易,并且您的函数背后的代码也变得相当简单。
    【解决方案2】:

    使用递归。以节点一阶遍历控制树。根据控制值适当使用节点的可见属性。如果父母设置为不可见,请不要访问孩子

    【讨论】:

      【解决方案3】:

      我认为你在递归的正确轨道上。但我会远离自定义属性——坚持标准。您真正需要的是通过递归方法在每个面板上设置 Visible 属性。

      【讨论】:

        【解决方案4】:

        如果您有严格的层次结构块/子/值并且数据来自数据库,我建议使用嵌套中继器和返回 3 个结果集的存储过程

        【讨论】:

          【解决方案5】:

          我认为我们需要更多地了解您想要实现的目标,以便首先确定这是否是正确的方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-07-18
            • 1970-01-01
            • 1970-01-01
            • 2016-12-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多