2011-04-19 82 views
2

我創建了下面的代碼從下面陣列asp.net MVC3自定義的助手不工作

var fruit = new string[] { "apple", "pear", "tomato" }; 

    public static MvcHtmlString CustomGrid(this HtmlHelper htmlHelper, String Id, IList Items, IDictionary<string, string> Attributes) 
     { 
     if (Items == null || Items.Count == 0 || string.IsNullOrEmpty(Id)) 
      return MvcHtmlString.Empty; 

     return BuildGrid(Items, Id, Attributes); 

    } 

    public static MvcHtmlString BuildGrid(IList Items, string Id, IDictionary<string, string> attributes) 
    { 
     StringBuilder sb = new StringBuilder(); 
     BuildHeader(sb, Items[0].GetType()); 

     foreach (var item in Items) 
     { 
      BuildTableRow(sb, item); 
     } 

     TagBuilder builder = new TagBuilder("table"); 
     builder.MergeAttributes(attributes); 
     builder.MergeAttribute("name", Id); 
     builder.InnerHtml = sb.ToString(); 
     var Tag = builder.ToString(TagRenderMode.Normal); 
     return MvcHtmlString.Create(Tag); 
    } 

    public static void BuildTableRow(StringBuilder sb, object obj) 
    { 
     Type objType = obj.GetType(); 
     sb.AppendLine("\t<tr>"); 
     foreach (var property in objType.GetProperties()) 
     { 
      sb.AppendFormat("\t\t<td>{0}</td>\n", property.GetValue(obj, null)); 
      // sb.AppendFormat("\t\t<td>{0}</td>\n", obj); 
     } 
     sb.AppendLine("\t</tr>"); 
    } 

    public static void BuildHeader(StringBuilder row, Type p) 
    { 
     row.AppendLine("\t<tr>"); 

     foreach (var property in p.GetProperties()) 
     { 
      row.AppendFormat("\t\t<th>{0}</th>\n", p.Name); 
     } 
     row.AppendLine("\t</tr>"); 
    } 

呈現一個表,但它並沒有提供任何的事情。我使用它是這樣的:

Html.CustomGrid("myTable", (System.Collections.IList)fruit, null); 

請建議解決方案。

+2

您是否在調試時逐步瞭解代碼? – 2011-04-19 15:24:48

回答

1

首先把一些調試語句,以確保什麼來自輸出。如果沒有,你很可能不會使用就像@ Html.CustomGrid,而是在代碼塊中使用它,而輸出不會呈現給響應流。

0

您錯過了@從 Html.CustomGrid(「myTable」,(System.Collections.IList)fruit,null);