2011-11-15 42 views
0

我编写了一个网格帮助程序(GridHelper.cs),它适用于所有模型。如何在自定义帮助程序中使用DisplayTemplate

这个辅助具有用于如下面呈现的每一行的方法:

private void RenderRow(HtmlTextWriter writer, T item) 
{ 
    writer.RenderBeginTag(HtmlTextWriterTag.Tr);   

    foreach (var col in _columns) 
    { 
    writer.RenderBeginTag(HtmlTextWriterTag.Td); 
    var value = typeof(T).GetProperty(col.FieldName).GetValue(item, null) ?? String.Empty;     
    writer.Write(value.ToString()); 
    writer.RenderEndTag(); 
    } 

    writer.RenderEndTag(); 
} 

另外我有一些DisplayTemplates在文件夹:/查看/共享/ DisplayTemplates 如布尔值,日期,等等

如何将writer.Write(value.ToString());行更改为使用该模板? 或者需要做什么修改才能在我的网格单元格中使用显示模板?

回答

0

使用此样品为那个问题

public class TestCol<T> 
    {   
     public MvcHtmlString RenderObj<T, TValue>(HtmlHelper<T> html, Expression<Func<T, TValue>> expression) 
     { 
      return html.DisplayFor(expression); 
     } 
    } 


    public static class testHelper 
    { 

     //Expression<Func<TModel, TValue>> expression 
     public static MvcHtmlString TestStringHelper<TModel, TValue>(this HtmlHelper<TModel> html, TValue item) 
     { 
      var y = new TestCol<TModel>(); 
      var x = y.RenderObj(html, modelitem => item); 
      return x; 
     } 

     public static MvcHtmlString TestModelHelper<T>(this HtmlHelper<T> html, T item) 
     { 
      var list = typeof(T).GetProperties().Where(p => p.PropertyType.Namespace == "System"); 
      string str = "<table border=1><tr>"; 
      foreach (var p in list) 
      { 
       var o = p.GetValue(item, null); 
       var xr = html.TestStringHelper(o).ToString(); 
       if (string.IsNullOrWhiteSpace(xr)) xr = o.ToString(); 
       str += string.Format("<td>{0}</td>", xr); 
      } 
      str += "</tr></table>"; 

      return new MvcHtmlString(str); 
     } 
    } 
相关问题