Как использовать DisplayTemplate в пользовательском помощнике - PullRequest
0 голосов
/ 15 ноября 2011

Я написал помощник по сетке (GridHelper.cs), он работает правильно для всех моделей.

Этот помощник имеет метод для рендеринга каждой строки, как показано ниже:

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 в папке: / Views / Shared / DisplayTemplates Например, логическое значение, дата и т. Д.

Как мне изменить строку writer.Write(value.ToString()); на использование этих шаблонов? или какие изменения необходимы для этой строки, чтобы разрешить использование шаблонов отображения в моих ячейках сетки?

1 Ответ

0 голосов
/ 17 ноября 2011

Используйте этот пример для этой проблемы

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);
        }
    }
...