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
相关产品推荐
相关产品推荐

