如何在ASP.NET WebForms中显示用户控件的列表

bAN*_*bAN 5 c# asp.net webforms

这不是一个真正的问题所以我希望不要被解雇!因此,我必须像时间轴一样制作推特,包含信息的块的叠加.

我真的不知道如何制作这个..问题是每次的块数都不一样,有时它只会是1块,有时是2块或者有时候更多..

那么我可以让一些HtmlWriter直接编写html吗?我在asp.net中很新,所以也许可以更容易地做到这一点!使用WebUserControl可能,一个块=一个wuc所以我可以添加我需要的wuc的数量..我很丢失所以也许有人已经做过这种事情并且可以让我以正确的方式...

谢谢你的阅读!

jev*_*lio 10

您正在创建一个用于表示"块"的用户控件的正确轨道,但您缺少的是一种将它们显示为列表的机制.

ASP.NET有许多可能的解决方案,但最简单的解决方案是使用ListView控件.

如果不知道你的数据是什么样子就很难提供示例代码,但我们假设你有一个名为的类Block:

public class Block
{
    public string Title {get; set;}
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

要显示一个块,您将创建一个用户控件,让我们调用它BlockControl:

标记:

<div style="margin:10px; padding:10px; background:#eee;">
    <h2><%= Block.Title %></h2>
    <%= Block.Text %>
</div>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

public partial class BlockControl : System.Web.UI.UserControl
{
    //Note the public property, we'll use this to data bind the ListView's item to the user control
    public Block Block { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在.aspx页面中,您可以声明一个ASP.NET ListView控件,并在ListView的ItemTemplate中使用BlockControl来显示数据.注意我们如何将ListView的当前数据项绑定到BlockControl.Block属性.

<asp:ListView ID="BlockList" runat="server">
    <ItemTemplate>
        <uc:BlockControl Block="<%# Container.DataItem %>" runat="server" />
    </ItemTemplate>
</asp:ListView>            
Run Code Online (Sandbox Code Playgroud)

从.aspx代码隐藏中设置ListView数据源.在您的情况下,数据可能来自数据库,但这里只是一些模拟数据:

protected void Page_Load(object sender, EventArgs e)
{
    List<Block> blocks = new List<Block>
    {
        new Block { Title = "Block1", Text="This is the block 1 content"},
        new Block { Title = "Block2", Text="This is the block 2 content"}
    };

    this.BlockList.DataSource = blocks;
    this.BlockList.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以显示封装在用户控件中的单个块,ListView为您提供了根据您的数据显示可变数量的这些用户控件的机制.