Оператор if в asp.net ASP.DataList vb.net

В классическом ASP я мог отображать разрыв раздела в зависимости от состояния. У меня есть таблица SQL с элементами меню, столбцами: (ListOrder (int), BeginUrl (varchar (20), ShowDate (varchar (20), EndUrl (varchar (20), Section (varchar (20)) BeginURL, ShowDate, EndUrl объединить для создания ссылки Раздел - это состояние (WA, OR, ID). В классическом варианте я создал переменную nLevel, установленную в "", а затем перейду к циклическому просмотру RS.

Do While NOT menuRS.EOF
   If menuRS.Fields("Section") <> nLevel Then
       Response.Write("<br><br>" & menuRS.Fields("Section"))
       nLevel = menuRS.Fields("Section")
   End If    
   If menuRS.Fields("Display") = 0 Then
       Response.Write("<br>"& menuRS.Fields("BeginUrl")&menuRS.Fields("ShowDate")&menuRS.Fields("EndUrl")) & VbCrLf
   End If
   menuRS.MoveNext
Loop

Что даст мне (примерно)

WA
<a href = "stuff">[date]</a>
<a href = "stuff">[date]</a>
OR
<a href = "stuff">[date]</a>
<a href = "stuff">[date]</a>
ID
<a href = "stuff">[date]</a>

Попытка продублировать это в .Net с помощью DataList, ItemTemplate и ASP: Label, конечно же, с использованием VB, дает мне согласие на разрыв «раздела». У меня зацикливаются пункты главного меню. Просто провал на Разрыве Раздела.

<asp:DataList ID = "MenuList1" runat = "server" DataSourceID = "NwccMenuList">
    <ItemTemplate>
        <asp:Label ID = "SectionBreak" runat = "server" 
            Text='<%# If(Eval("Section") <> Me.nLevel) Then (Eval("Section") Me.nLevel= Eval("Section") End If%>' />
    </ItemTemplate>
    <ItemTemplate>
        <asp:Label ID = "BeginUrlLabel" runat = "server" 
            Text='<%# Eval("MenuUrl") %>' />
    </ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID = "NwccMenuList" runat = "server" 
    ConnectionString = "<%$ ConnectionStrings:nwcctanningConnectionString %>" 
    SelectCommand = "SELECT ([BeginUrl]+[ShowDate]+[EndUrl]) AS MenuUrl, Section 
    FROM [Menu] WHERE ([Display] = 0) ORDER BY [Section] DESC, [ListOrder]">
    <SelectParameters>
        <asp:Parameter DefaultValue = "0" Name = "Display" 
            Type = "Byte" />
    </SelectParameters>
</asp:SqlDataSource>

Не уверен, что переменная nLevel (в файле кода) достижима или не может пройти через оператор If! Я ценю любые указатели или то, где я ошибся!

Вам понадобится Repeater и много дополнительного кода в событии ItemDataBound или настраиваемое средство визуализации, чтобы сделать это с помощью WebForms.

Joel Coehoorn 23.08.2018 04:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как правило, вы хотите заменить один код динозавра другим древним кодом. Хорошо, давайте сделаем это способом ASP.NET. Во-первых, asp:DataList - не лучший выбор, потому что он отображает таблицу. Используйте простейший элемент управления привязкой данных, например asp:Repeater. Это пример кода, который выполняет работу декларативно.

<asp:Repeater ID = "rptMenu" runat = "server" DataSource = "NwccMenuList">
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
    <FooterTemplate></ul></FooterTemplate>
    <ItemTemplate>
        <li>
            <asp:Literal runat = "server" ID = "ltrSection" Text='<%#Eval("Section") %>'></asp:Literal>
            <asp:Repeater runat = "server" DataSource = "sqlSubmenu">
                <HeaderTemplate>
                    <ul>
                </HeaderTemplate>
                <FooterTemplate></ul></FooterTemplate>
                <ItemTemplate>
                    <li>
                        <asp:HyperLink runat = "server" Text='<%#Eval("MenuUrl") %>' NavigateUrl='<%#Eval("MenuUrl") %>'></asp:HyperLink>
                    </li>
                </ItemTemplate>
            </asp:Repeater>
            <%-- Note that a child datasource is inside parent ItemTemplate --%>
            <asp:SqlDataSource ID = "sqlSubmenu" runat = "server"
                ConnectionString = "<%$ ConnectionStrings:nwcctanningConnectionString %>"
                SelectCommand = "SELECT ([BeginUrl]+[ShowDate]+[EndUrl]) AS MenuUrl 
                FROM [Menu] WHERE ([Display] = 0 and Section=@section) ORDER BY [ListOrder]">
                <SelectParameters>
                    <%-- literal control from parent ItemTemplate --%>
                    <asp:ControlParameter ControlID = "ltrSection" Name = "section" Type = "String" />
                </SelectParameters>
            </asp:SqlDataSource>
        </li>
    </ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource ID = "NwccMenuList" runat = "server"
    ConnectionString = "<%$ ConnectionStrings:nwcctanningConnectionString %>"
    SelectCommand = "SELECT distinct Section FROM [Menu] WHERE ([Display] = 0) ORDER BY [Section] DESC">
    <SelectParameters>
        <asp:Parameter DefaultValue = "0" Name = "Display"
            Type = "Byte" />
    </SelectParameters>
</asp:SqlDataSource>

Опять же, этому подходу более 10 лет.

Там была пара ошибок, убрал их. Я ценю вашу помощь. Пришлось превратить asp: Literal в asp: Label (для PropertyName должно быть установлено допустимое имя свойства элемента управления с именем ltrSection в ControlParameter «Section») и пришлось объявить идентификатор в полях DataSource в репитерах. Еще раз ценю вашу помощь!

Bwilly 24.08.2018 02:58
asp:Literal не отображает разметку HTML. PropertyName = "Text". Обычно это не требуется. Как правило, ASP.NET теперь считается устаревшим, если не устаревшим. Я удивлен, что вы перемещаете одну старую (доисторическую) платформу на другую старую платформу. MVC и ASP Core сегодня более популярны.
Alex Kudryashev 24.08.2018 06:23

Другие вопросы по теме