2011-11-15 5 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ありますなど

ブール、日付、AS /ビュー/共有/ 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); 
     } 
    } 
については、このサンプル
関連する問題