[ 来源:http://www.it55.com | 作者: | 时间:2007-12-26 | 收藏 | 推荐 ] 【大 中 小】
由于HtmlHelper通过硬编码的方式来输出html,这样生成的内容和样式如果不是在开发人员协助似乎很难调整。下面通过匿名函数来实现HtmlHelper生成的关键内容委托给Aspx的html内容来完成,这样即使是不懂程序的美工也能够很好的调整样式和输出内容的格式。
以下是一个Grid的HtmlHelper的调用:
<div>
<%
System.Collections.Generic.List<User> users = new System.Collections.Generic.List<User>();
users.Add(new User("henry1", "aaaa"));
users.Add(new User("henry2", "aaaa"));
users.Add(new User("henry3", "aaaa"));
users.Add(new User("henry4", "aaaa"));
HtmlHelper.Grid<User>(users, "",
new Column<User>{
Caption= "用户名",
ItemField="Name",
ItemBlock= delegate(ItemArgs<User> e)
{%>
<a href=http://www.aspcool.com/lanmu/"?<%=e.Source.Name %>"><%=e.Source.Name%></a>
<% }
},
new Column<User>{
Caption="邮件",
ItemField="Mail",
ItemBlock=delegate(ItemArgs<User> e) {%>
<input value="<%=e.Source.Mail %>" style="width: 315px" />
<% }
},
new Column<User>{
Caption="操作",
ItemBlock=delegate(ItemArgs<User> e) {%>
<a href="javascript:if(confirm('是否要删除<%=e.Source.Name %>用户'))
{alert('<%=e.Source.Name %>用户已经删除')}">删除</a>
<% }
}
);
%>
</div>
代码里可以看到用户名和邮件这两列的数据信息最终通过html描述来完成,而并不是通过硬编码的方式在代码中写死。
Grid的HtmlHelper的实现代码如下:
public class HtmlHelper
{
public static void Grid<T>(IList<T> source,string css, params Column<T>[] cols)
{
HttpResponse response = HttpContext.Current.Response;
Html32TextWriter writer = new Html32TextWriter(response.Output);
writer.WriteBeginTag("Table");
writer.WriteAttribute("class", css);
writer.Write(">");
writer.WriteBeginTag("Tr");
writer.Write(">");
foreach(Column<T> col in cols)
{
writer.WriteBeginTag("Td");
writer.WriteAttribute("Class", col.HeadCss);
writer.Write(">");
if (col.HeadBlock == null)
{
writer.Write(col.Caption);
}
else
{
writer.Write("");
col.HeadBlock(col);
}
writer.WriteEndTag("Td");
}
writer.WriteEndTag("Tr");
ItemArgs<T> e;
int index = 0;
foreach (T item in source)
{
writer.WriteBeginTag("Tr");
writer.Write(">");
foreach (Column<T> col in cols)
{
writer.WriteBeginTag("Td");
writer.WriteAttribute("Class", col.ItemCss);
writer.Write(">");
if (col.ItemBlock == null)
(编辑:IT资讯之家 www.it55.com)