Как я могу получить тип свойства с шаблоном t4 для форматирования даты и времени в jqgrid?

#c# #.net-4.0 #jqgrid #t4

#c# #.net-4.0 #jqgrid #t4

Вопрос:

Я пытаюсь отформатировать дату, используемую с помощью jqgrid.

Я использую строительные леса MVC с T4.

В шаблоне T4 есть одна часть, подобная этой

 jQuery("#ajaxGrid").jqGrid({
        url: '@Url.Action("GridData")',
        datatype: "json",
        jsonReader: { repeatitems: false, id: "<#= Model.PrimaryKeyName #>" },
        colNames: [<#= string.Join(", ", properties.Select(prop => "'"   prop.Name   "'")) #>],
        colModel: [
            <#= string.Join(", rn         ", properties.Select(prop =>
                string.Format("{{ name: '{0}', editable: true, sortable: true, hidden: {1}, align: {2} {3}}}", prop.Name, prop.Name == Model.PrimaryKeyName ? "true" : "false", "left", prop.Type.ToString() == "DateTime" ? "sorttype: 'date', datefmt: 'm/d/Y h:i AmPm'": "")
            )) #>
        ],
        rowNum: 5,
        pager: '#ajaxGridPager',
        width: '850',
        height: '15em'
    });
  

prop.Type.toString() == «DateTime» ? «sorttype: ‘date’, datefmt: ‘m / d / Y h:i AmPm'»: «» не работает.

Я хочу отформатировать дату, если поле имеет значение DateTime, как на веб-странице, которую я вижу /Date(1315968717587)/, и я хочу изменить шаблон T4, чтобы автоматически правильно генерировать его для будущих объектов.

Как я могу это сделать? Заранее спасибо! Гильермо.

Редактировать

Я читал, что я могу ссылаться на Microsoft.VisualBasic и использовать

 Microsoft.VisualBasic.Information.TypeName(prop)
  

Но он возвращает CodeProperty2. Я не могу понять, как получить реальный тип.
Я пытался с

 Microsoft.VisualBasic.Information.TypeName(prop).Type 
  

и затем он говорит:
ошибка CS1061: компиляция преобразования: ‘string’ не содержит определения для ‘Type’ и не удалось найти метод расширения ‘Type’, принимающий первый
параметр типа ‘string’ (вам не хватает директивы using или ссылки на сборку?)

Итак, он знает, что это строка, но toString() также возвращает CodeProperty2 .

Есть идеи? Заранее спасибо! Гильермо.

Ответ №1:

Как насчет:

 prop.Type.GetType() == typeof (System.DateTime) 
   ?  "sorttype: 'date', datefmt: 'm/d/Y h:i AmPm'"
   :  ""
  

Комментарии:

1. Нет, prop.Type. GetType() выводит систему. __ComObject

2. Хм, вы знаете, какие интерфейсы реализует этот Com-объект? Возможно, есть способы запросить, какой тип он представляет?

3. Не знаю, в любом случае, я могу это выяснить?

Ответ №2:

Поскольку у меня пока не было другого ответа, я исправляю его, глядя на имя свойства. Если он содержит строку «Date», я форматирую ее как Date, но я бы хотел избежать этого, поскольку я не хочу привязывать имя свойства jqgrid, я имею в виду, что нужно иметь возможность называть свойство как угодно, и оно должно продолжать работать и показывать его какдата.