Скрытие и отображение содержимого в ASP.Net на основе значения - PullRequest
0 голосов
/ 06 ноября 2008

Я ищу элегантное решение для удаления контента со страницы ASP.Net, если данные не были установлены. Позвольте мне объяснить это немного подробнее.

У меня есть несколько блоков данных на странице, которые содержат некоторые подразделы с отдельными значениями в них. Если для одного из значений не было задано никаких данных, мне нужно его скрыть (чтобы оно не занимало место). Кроме того, если ни одно из значений в подразделе не было установлено, его также необходимо скрыть. Наконец, если ни один из подразделов не виден внутри блока / панели, тогда мне нужно скрыть все это.

Макет реализован с использованием вложенных панелей / DIVs

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

Любая помощь очень ценится.

EDIT:

Хорошо, что делает это сложным, так это то, что внутри подразделов могут быть другие элементы управления, которые не учитывают скрытие и отображение элементов управления. И каждая панель значение потенциально может содержать элементы управления, которые не влияют на то, отображается она или нет. Пример:

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

1 голос
/ 06 ноября 2008

можно избежать рекурсивного обхода, если вы можете написать функции, которые возвращают 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>
0 голосов
/ 06 ноября 2008

Я думаю, что нам нужно больше понимать о том, чего вы пытаетесь достичь, чтобы определить, правильный ли это подход с самого начала.

0 голосов
/ 06 ноября 2008

Если у вас есть строгая иерархия блоков / суб / значений и данные поступают из базы данных, я предлагаю вложенные повторители и хранимую процедуру, которая возвращает 3 набора результатов

0 голосов
/ 06 ноября 2008

Я думаю, что вы на правильном пути с рекурсией. Но я бы держался подальше от пользовательских атрибутов - придерживался стандартов. Все, что вам действительно нужно, это установить свойство Visible на каждой панели с помощью рекурсивного метода.

0 голосов
/ 06 ноября 2008

Используйте рекурсию. Пройдите по дереву управления в первом порядке узла. При необходимости используйте свойство visible узла на основе значений элемента управления. Не посещайте детей, если родитель установлен невидимым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...