C#嵌套Repeater子控件数据错误:所有子Repeater显示相同新闻标题如何解决
问题原因
- 外层Repeater每绑定一行数据就会触发一次
ItemDataBound事件,你在事件内部遍历了全部通讯记录给当前子Repeater赋值,每次赋值都会被后续集合项的新闻内容覆盖,最终所有子Repeater都会显示集合最后一条通讯对应的新闻列表,所以出现了所有子项内容一致的问题。 - 补充优化说明:直接取当前行的绑定数据对象的方式不依赖全局字段,即使是回发场景也能正常工作,稳定性更强。
修复方案
只需要修改rptNewsItems_ItemDataBound方法的逻辑即可,修正后代码如下:
protected void rptNewsItems_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Repeater rptNews = e.Item.FindControl("rptNews") as Repeater; // 直接获取当前行绑定的单条NewsletterHistoryModel对象,不需要遍历全局集合 NewsletterHistoryModel currentNewsletter = e.Item.DataItem as NewsletterHistoryModel; rptNews.DataSource = currentNewsletter.newsModels; rptNews.DataBind(); } }
内容的提问来源于stack exchange,提问作者Emre Serper
相关产品推荐
相关产品推荐

