将数据发送到另一个用户控件内的用户控件

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 failsVirtual Listview for ASP.net?