Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于值的ASP.Net内容隐藏与显示_.net_Asp.net_Controls_User Interface - Fatal编程技术网

基于值的ASP.Net内容隐藏与显示

基于值的ASP.Net内容隐藏与显示,.net,asp.net,controls,user-interface,.net,Asp.net,Controls,User Interface,我正在寻找一种优雅的解决方案,用于在没有设置数据的情况下从ASP.Net页面删除内容。让我再解释一下 我在一个页面上有一些数据块,其中包含一些带有单独值的子部分。如果没有为其中一个值设置数据,我需要隐藏它(这样它就不会占用空间)。此外,如果未设置子节中的任何值,则也需要隐藏该子节。最后,如果块/面板中没有可见的子部分,那么我需要隐藏整个内容 布局是使用嵌套面板/分区实现的 <Panel id="block"> <Panel id="sub1"> &

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

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

布局是使用嵌套面板/分区实现的

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

废话
废话

这是一个过于简化的示例,但离我必须担心的问题不远。

使用递归。以节点优先顺序遍历控制树。根据控制值,酌情使用节点的visible属性。如果父对象设置为不可见,则不要访问子对象

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

如果您可以编写函数为每个组返回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>

废话
废话
废话
废话

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

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

我不久前在一个项目上做了同样的事情,效果很好。它使实现变得非常简单,代码隐藏函数也变得相当简单。