网页上有很多“盒子”模型。如下图

代码并不复杂,但每次都要复制,未免太过于麻烦。于是就想写一个控件,类似于Panel控件的效果,当然,自己写个自定义控件,继承自Panel就行了。
在当前解决方案中,新建项目,选“Web控件库”;
创建好项目,即可“添加新建项”,选“自定义控件”即可。
控件的代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:MoreBox runat=server></{0}:MoreBox>")]
public class MoreBox : Panel, INamingContainer
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Text"] = value;
}
}
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string More
{
get
{
String s = (String)ViewState["More"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["More"] = value;
}
}
public override void RenderControl(HtmlTextWriter writer)
{
//Panel控件中(标签之间)的文本内容
base.RenderControl(writer);
}
protected override void Render(HtmlTextWriter output)
{
//Panel控件前面的代码
RenderHead(output);
//panel的css样式
base.CssClass = "BoxContext";
//输出控件
base.Render(output);
//Panel控件后面的代码
RenderEnd(output);
}
protected void RenderHead(HtmlTextWriter writer)
{
string html = "";
html += @"<div class=""ShowBox"">";
html += @"<table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">
<tr>";
//显示标题
html += @"<td class=""MoreBoxTitle"">" + Text + "</td>";
html += @"<td class=""MoreRight"">";
if (More != "")
{
//显示更多
html += "<a href=\""+More+"\">更多>></a>";
}
html += @"</td></tr></table>";
//html+=@"<div class=""BoxContext"">";
writer.Write(html);
}
protected void RenderEnd(HtmlTextWriter writer)
{
string html = @"";
html += @"</div>";
writer.Write(html);
}
}
}
在上面的控件中,Text属性是“盒子”的标题,More属性是“盒子”的“更多”的链接地址。
当然,里面还引用了一些CSS样式,我就不提供了,无非是起些美化作用罢了。
编译该项目后,在vs.net的左侧工具箱中,就会出一个新的选项卡,里面的控件,就是自己编写的控件。拖过来用就行了,很简单的,用法与Panel完全一样。