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>
下面是我的代码、设计和模型部分
在我的 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>