asp.net - asp.net ASP.DataList vb.net 中的 if 语句
问题描述
在经典 ASP 中,我能够显示基于状态的分节符。我有一个带有菜单项的 SQL 表,列:(ListOrder(int),BeginUrl(varchar(20),ShowDate(varchar(20),EndUrl(varchar(20),Section(varchar(20))) BeginURL,ShowDate,EndUrl连接以创建链接。部分是状态(WA,OR,ID)。在经典中,我创建了一个 var 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>
尝试使用 DataList、ItemTemplate 和 ASP:Label 在 .Net 中复制它,当然是使用 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 语句!我感谢任何指示或我出错的地方!
解决方案
通常,您想用另一个古代代码替换一个恐龙代码。好的,让我们以 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 多年的历史。