基于价值隐藏和显示ASP.Net中的内容

时间:2008-11-06 15:40:08

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

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

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

使用嵌套的Panels / 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的递归函数调用来实现此目的。

非常感谢任何帮助。

编辑:

好的,这使得这个棘手的原因是子部分中可能还有其他控件不会影响控件的隐藏和显示。并且每个面板都可能在其中具有控件,这些控件不会影响它是否显示。例如:

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

这是一个过于简化的例子,但与我不必担心的情况相差无几。

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

使用递归。以节点第一顺序遍历控制树。根据控件值,根据需要使用节点的visible属性。如果父级设置为不可见,则不要访问子级

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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