User Control大家肯定不会陌生,在使用ASP.NET的过程中,除了aspx页面,最常见的就莫过于ascx了。ascx是一个有独立逻辑的组件,提供了强大的复用特性,合理使用,能够大大提高开发效率。通过User Control直接生成HTML内容其实已经是一个比较常用的技巧了(尤其在AJAX时代),不过网络上这方面的内容比较少,很多人还是在苦苦地拼接字符串,因此在这里我通过一个实例简单介绍一下这个技巧。 对一个对象(文章,图片,音乐,etc.)进行评论是应用中最常见的功能之一。首先,我们定义一个Comment类,以及其中会用到的“获取”方法:
public partial class Comment
{
public DateTime CreateTime { get; set; }
public string Content { get; set; }
}
public partial class Comment
{
private static List<Comment> s_comments = new List<Comment>
{
new Comment
{
CreateTime = DateTime.Parse("2008-5-1"),
Content = "今天天气不错"
},
new Comment
{
CreateTime = DateTime.Parse("2008-5-2"),
Content = "挺风和日丽的"
},
new Comment
{
CreateTime = DateTime.Parse("2008-5-3"),
Content = "我们下午没有课"
},
new Comment
{
CreateTime = DateTime.Parse("2008-5-1"),
Content = "这的确挺爽的"
}
};
public static List<Comment> GetComments(int pageSize, int pageIndex, out int totalCount)
{
totalCount = s_comments.Count;
List<Comment> comments = new List<Comment>(pageSize);
for (int i = pageSize * (pageIndex - 1);
i < pageSize * pageIndex && i < s_comments.Count; i++)
{
comments.Add(s_comments);
}
return comments;
}
}
为了显示一个评论列表,我们可以使用一个用户控件(ItemComments.aspx)来封装。自然,分页也是必不可少的:
<asp:Repeater runat="server" ID="rptComments">
<ItemTemplate>
时间:<%# (Container.DataItem as Comment).CreateTime.ToString() %><br />
内容:<%# (Container.DataItem as Comment).Content %>
</ItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
<FooterTemplate>
<hr />
</FooterTemplate>
</asp:Repeater>
<% if (this.PageIndex > 1)
{ %>
<a href="/ViewItem.aspx?page=<%= this.PageIndex - 1 %>" title="上一页">上一页</a>
<% } %>
<% if (this.PageIndex * this.PageSize < this.TotalCount)
{ %>
<a href="/ViewItem.aspx?page=<%= this.PageIndex + 1 %>" title="上一页">下一页</a>
<% } %>
public partial class ItemComments : System.Web.UI.UserControl
{
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
this.rptComments.DataSource = Comment.GetComments(this.PageSize,
this.PageIndex, out this.m_totalCount);
this.DataBind();
}
public int PageIndex { get; set; }
public int PageSize { get; set; }
private int m_totalCount;
public int TotalCount
{
get
{
return this.m_totalCount;
}
}
}
然后再页面(ViewItem.aspx)中使用这个组件:
<div id="comments"><demo:ItemComments ID="itemComments" runat=&quo |