You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET VB嵌套ListView问题:内层ListView无法显示数据

解决ASP.NET VB嵌套ListView内层无数据加载问题

问题核心是内层SqlDataSource无法正确获取外层ListView的subcat值,主要有两个关键点需要修正:

1. 修正ControlParameter的控件ID

你的内层SqlDataSource里的ControlParameter指定的ControlID是subcat,但外层ItemTemplate里的Label实际ID是subcatLabel,这会导致参数无法找到目标控件,需要修改ControlID为正确的控件ID:

<asp:SqlDataSource runat="server" ID="data" ConnectionString="<%$ ConnectionStrings:aarogyamindConnectionString %>" SelectCommand="SELECT [b_name] FROM [blog] WHERE ([b_sub_cat] = @b_sub_cat)">
    <SelectParameters>
        <!-- 把ControlID改成subcatLabel,对应外层ItemTemplate里的Label控件 -->
        <asp:ControlParameter ControlID="subcatLabel" Name="b_sub_cat" PropertyName="Text" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

2. 手动触发内层ListView的数据绑定

嵌套ListView的内层控件默认不会自动触发数据绑定,需要在外层ListView的ItemDataBound事件中手动绑定内层ListView。

后台VB代码:

Protected Sub ListView1_ItemDataBound(sender As Object, e As ListViewItemEventArgs) Handles ListView1.ItemDataBound
    If e.Item.ItemType = ListViewItemType.DataItem Then
        ' 获取当前Item里的内层ListView和SqlDataSource
        Dim innerListView As ListView = e.Item.FindControl("myListView")
        Dim dataSource As SqlDataSource = e.Item.FindControl("data")
        
        ' 手动绑定数据源到内层ListView
        innerListView.DataSource = dataSource
        innerListView.DataBind()
    End If
End Sub

同时在外层ListView的标签中添加事件绑定:

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="subcat" OnItemDataBound="ListView1_ItemDataBound">

额外验证点

  • 确认外层subcatLabel的Text属性正确绑定了subcat值,可通过查看页面源码确认渲染后的文本是否正确。
  • 验证内层SqlDataSource的查询语句是否正确,可临时把参数值固定为已知存在的b_sub_cat值,测试是否能返回数据,排除SQL语句本身的问题。

内容的提问来源于stack exchange,提问作者Prince Jodhani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:33:37