当前位置:首页>网络学院>程序开发>ASP.NET教程>文章内容

Asp.Net MVC下的HtmlHelper另类写法

[ 来源: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

返回顶部
共3页: 上一页 1 [2] [3] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]