Asp.Net MVC下的HtmlHelper另类写法
点击次数:17 次 发布日期:2008-11-26 10:36:01 作者:源代码网
|
源代码网推荐 由于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="?<%=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) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 writer.Write(col.Value(item)); 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 else 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 writer.Write(""); 源代码网推荐 源代码网推荐 e = new ItemArgs<T>(item, index,col); 源代码网推荐 源代码网推荐 col.ItemBlock(e); 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 writer.WriteEndTag("Td"); 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 writer.WriteEndTag("Tr"); 源代码网推荐 源代码网推荐 index++; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 writer.WriteEndTag("Table"); 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 public class Column<T> 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 public Column(string caption, string itemfield) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 Caption = caption; 源代码网推荐 源代码网推荐 ItemField = itemfield; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 public Column(string caption, string itemfield,int width) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 Caption = caption; 源代码网推荐 源代码网推荐 ItemField = itemfield; 源代码网推荐 源代码网推荐 Width = width; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 public Column(string caption, string itemfield, 源代码网推荐 源代码网推荐 Action<Column<T>> head, 源代码网推荐 源代码网推荐 Action<ItemArgs<T>> item) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 Caption = caption; 源代码网推荐 源代码网推荐 ItemField = itemfield; 源代码网推荐 源代码网推荐 HeadBlock = head; 源代码网推荐 源代码网推荐 ItemBlock = item; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 public Column(string caption, string itemfield,int width, 源代码网推荐 源代码网推荐 Action<Column<T>> head, 源代码网推荐 源代码网推荐 Action<ItemArgs<T>> item) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 Caption = caption; 源代码网推荐 源代码网推荐 ItemField = itemfield; 源代码网推荐 源代码网推荐 HeadBlock = head; 源代码网推荐 源代码网推荐 ItemBlock = item; 源代码网推荐 源代码网推荐 Width = width; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private int mWidth; 源代码网推荐 源代码网推荐 public int Width 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mWidth; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mWidth = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private string mCaption; 源代码网推荐 源代码网推荐 public string Caption 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mCaption; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mCaption = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private string mItemField; 源代码网推荐 源代码网推荐 public string ItemField 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mItemField; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mItemField = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private string mHeadCss="GridHead"; 源代码网推荐 源代码网推荐 public string HeadCss 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mHeadCss; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mHeadCss = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private string mItemCss="GridItem"; 源代码网推荐 源代码网推荐 public string ItemCss 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mItemCss; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mItemCss = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private Action<ItemArgs<T>> mItemBlock; 源代码网推荐 源代码网推荐 public Action<ItemArgs<T>> ItemBlock 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mItemBlock; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mItemBlock = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private Action<Column<T>> mHeadBlock; 源代码网推荐 源代码网推荐 public Action<Column<T>> HeadBlock 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mHeadBlock; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 set 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mHeadBlock = value; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 protected PropertyInfo mProperty; 源代码网推荐 源代码网推荐 public object Value(object source) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 if (ItemField == null || ItemField == "") 源代码网推荐 源代码网推荐 return null; 源代码网推荐 源代码网推荐 if (mProperty == null) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mProperty = typeof(T).GetProperty(ItemField, BindingFlags.Public | BindingFlags.Instance); 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 return mProperty.GetValue(source, null); 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 public class ItemArgs<T> : EventArgs 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 public ItemArgs(T source,int index,Column<T> col) 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 mSource = source; 源代码网推荐 源代码网推荐 mIndex = index; 源代码网推荐 源代码网推荐 mColumn = col; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private T mSource; 源代码网推荐 源代码网推荐 public T Source 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mSource; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private int mIndex; 源代码网推荐 源代码网推荐 public int Index 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mIndex; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 private Column<T> mColumn; 源代码网推荐 源代码网推荐 public Column<T> Column 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 get 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 return mColumn; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
