Repeater 中的 C# Repeater - child repeater 没有正确的值

C# Repeater in Repeater - Correct values are not coming for child repeater

下面是我的代码、设计和模型部分

在我的 NewsletterHistoryModel 中,我将时事通讯和新闻的一些信息作为列表保存在其中。

我可以通过以下操作将时事通讯的信息打印到第一个转发器。 但是当我尝试将新闻标题打印到其中的中继器时,出现了错误的值。我正在尝试在第一个转发器的 ItemDataBound 中执行此操作。

child 转发器没有正确的值。所有新闻通讯都有相同的 4 个新闻标题。

我该如何解决这个问题?

ascx.cs

   List<NewsletterHistoryModel> newsletterHistoryModel;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindDataNewsLetter();
        }
    }

    public void BindDataNewsLetter()
    {

        newsletterHistoryModel = new List<NewsletterHistoryModel>();
        var dataList = NewsletterLayer.SelectListNewsletterByPublish();

        List<NewsletterDetailsModel> newsletterDetailsModel = new List<NewsletterDetailsModel>();
        if (dataList.Count > 0)
        {
            foreach (var item in dataList)
            {
                List<NewsModel> newsModels = new List<NewsModel>();
                newsletterDetailsModel = NewsletterDetailsLayer.SelectNewsLetterDetailWithNewsLetter(item.Title);
                foreach (var x in newsletterDetailsModel)
                {
                    //newsModels.Add(NewsLayer.SelectNews(x.NewsId));
                    newsModels.Add(NewsLayer.SelectNews(x.NewsId));
                }
                newsletterHistoryModel.Add(new NewsletterHistoryModel
                {
                    Id = item.Id,
                    Issue = item.Issue,
                    Year = item.Year,
                    Month = item.Month,
                    Day = item.Day,
                    PreviewLink = item.PreviewLink,
                    AttachmentUrl = item.CoverPhoto,
                    newsModels = newsModels
                });
            }

            rptNewsItems.DataSource = newsletterHistoryModel;
            rptNewsItems.DataBind();

        }
    }

    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;
            foreach (var item in newsletterHistoryModel)
            {
                rptNews.DataSource = item.newsModels;
                rptNews.DataBind();
            }

        }

    }

ascx.designer.cs

 <asp:Repeater runat="server" ID="rptNewsItems" OnItemDataBound="rptNewsItems_ItemDataBound">
        <ItemTemplate>
            <a href="<%# Eval("PreviewLink") %>" class="card2 col-12 col-md-3">
                <h4 class="card-issue">#<%# Eval("Issue") %> - <%# Eval("Day") %> <%# Eval("Month") %> <%# Eval("Year") %></h4>
                <img class="card-img-top" src="<%# Eval("AttachmentUrl") %>">
                <div class="card-body">
                    <asp:Repeater runat="server" ID="rptNews">
                        <ItemTemplate>
                            <h4 class="card-description">#<%# Eval("Title") %></h4>
                        </ItemTemplate>
                    </asp:Repeater>
                </div>
            </a>
        </ItemTemplate>
    </asp:Repeater>

NewsletterHistoryModel

    public int Id { get; set; }
    public string Issue { get; set; }
    public string Year { get; set; }
    public string Month { get; set; }
    public string Day { get; set; }
    public string PreviewLink { get; set; }
    public string AttachmentUrl { get; set; }
    public List<NewsModel> newsModels { get; set; }

我解决了问题。 不需要 ItemDataBound。 我已将模型中保留的新闻模型列表提供给子转发器的数据源。

   <asp:Repeater runat="server" ID="rptNewsItems" >
        <ItemTemplate>
            <a href="<%# Eval("PreviewLink") %>" class="card2 col-12 col-md-3">
                <h4 class="card-issue">#<%# Eval("Issue") %> - <%# Eval("Day") %> <%# Eval("Month") %> <%# Eval("Year") %></h4>
                <img class="card-img-top" src="<%# Eval("AttachmentUrl") %>">
                <div class="card-body">

                    <asp:Repeater runat="server" ID="rptNews" DataSource='<%# Eval("newsModels") %>'>
                        <ItemTemplate>
                            <h4 class="card-description"># <%# Eval("Title") %></h4>
                        </ItemTemplate>
                    </asp:Repeater>
                </div>
            </a>
        </ItemTemplate>
    </asp:Repeater>