将数据发送到另一个用户控件内的用户控件
Send data to a user control inside another user control
我需要什么
我需要评论UC收集转发器绑定的所有最新评论,例如List<CommentInfo>
并通过DataRef
发送到Comment
UC 属性 这样我就可以显示每条评论了。
我试图在 Comments_ItemDataBound
中创建一个集合,但我无法知道我何时查看了所有数据,因为 comments.Items.Count
没有项目总数在所有评论都被数据绑定之前。
int count = 1;
List<CommentInfo> commentsList = new List<CommentInfo>();
protected void comments_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
cil.Add(new CommentInfo
{
username = DataBinder.Eval(e.Item.DataItem, "username").ToString()
...
});
// comments.Items.Count here is 0, on next data bound will be 1 and count will be 2
if (comments.Items.Count == 5)
{
var comment = e.Item.FindControl("comment1") as Comment;
comment.DataRef = commentsList;
}
count++;
}
}
这个问题问的问题是如何收集所有评论 List<CommentInfo>
并将它们传递给 DataRef
属性.
Comments
用户控件有一个用于显示最新评论的转发器。
中继器的 DataSource
来自 SQL 服务器。
<asp:Repeater ID="comments" runat="server" onitemdatabound="Comments_ItemDataBound">
<ItemTemplate>
<uc1:Comment ID="comment1" runat="server" />
</ItemTemplate>
</asp:Repeater>
Comment
UC 将通过 public 属性 DataRef
类型显示从 Comments
的转发器收到的评论集合中的一条评论Object
在我将它发送到 Comment
UC 之前,我将把它转换为我需要的任何 class,至少这是我的想法。
<div class="comment" id="<%= DataRef.comment_id %>">
<a class="comment-link" href="/<%= DataRef.friendly_url %>">
Written by: <strong><%= DataRef.username %></strong>, <%= DataRef.comment_date %></em>
<%= DataRef.comment_text %></a>
</div>
一种方法是在他迭代转发器时询问数据
<asp:Repeater ID="comments" runat="server">
<ItemTemplate>
<uc1:Comment ID="comment1" runat="server"
DataRef="<%#GetMyReference(Container.DataItem)%>" />
</ItemTemplate>
</asp:Repeater>
以及后面的代码
public object GetMyReference(object oItem)
{
// I am not sure what you wish to return here...
// or you may want to full return the oItem, I am not sure
// this is an example
return DataBinder.Eval(oItem, "yourDataItem");
}
请注意,DataRef
是用户控件上的一个 public 值。
相似答案:Add a list of self created web user controls to a listview in codebehind fails
和 Virtual Listview for ASP.net?
我需要什么
我需要评论UC收集转发器绑定的所有最新评论,例如List<CommentInfo>
并通过DataRef
发送到Comment
UC 属性 这样我就可以显示每条评论了。
我试图在 Comments_ItemDataBound
中创建一个集合,但我无法知道我何时查看了所有数据,因为 comments.Items.Count
没有项目总数在所有评论都被数据绑定之前。
int count = 1;
List<CommentInfo> commentsList = new List<CommentInfo>();
protected void comments_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
cil.Add(new CommentInfo
{
username = DataBinder.Eval(e.Item.DataItem, "username").ToString()
...
});
// comments.Items.Count here is 0, on next data bound will be 1 and count will be 2
if (comments.Items.Count == 5)
{
var comment = e.Item.FindControl("comment1") as Comment;
comment.DataRef = commentsList;
}
count++;
}
}
这个问题问的问题是如何收集所有评论 List<CommentInfo>
并将它们传递给 DataRef
属性.
Comments
用户控件有一个用于显示最新评论的转发器。
中继器的 DataSource
来自 SQL 服务器。
<asp:Repeater ID="comments" runat="server" onitemdatabound="Comments_ItemDataBound">
<ItemTemplate>
<uc1:Comment ID="comment1" runat="server" />
</ItemTemplate>
</asp:Repeater>
Comment
UC 将通过 public 属性 DataRef
类型显示从 Comments
的转发器收到的评论集合中的一条评论Object
在我将它发送到 Comment
UC 之前,我将把它转换为我需要的任何 class,至少这是我的想法。
<div class="comment" id="<%= DataRef.comment_id %>">
<a class="comment-link" href="/<%= DataRef.friendly_url %>">
Written by: <strong><%= DataRef.username %></strong>, <%= DataRef.comment_date %></em>
<%= DataRef.comment_text %></a>
</div>
一种方法是在他迭代转发器时询问数据
<asp:Repeater ID="comments" runat="server">
<ItemTemplate>
<uc1:Comment ID="comment1" runat="server"
DataRef="<%#GetMyReference(Container.DataItem)%>" />
</ItemTemplate>
</asp:Repeater>
以及后面的代码
public object GetMyReference(object oItem)
{
// I am not sure what you wish to return here...
// or you may want to full return the oItem, I am not sure
// this is an example
return DataBinder.Eval(oItem, "yourDataItem");
}
请注意,DataRef
是用户控件上的一个 public 值。
相似答案:Add a list of self created web user controls to a listview in codebehind fails 和 Virtual Listview for ASP.net?