Я хочу создать общее решение DataTable на стороне сервера в приложении ASP.NET MVC. То, что у меня есть на каждом изображении Index
, было бы JQuery datatable с вызовом AJAX контроллеру для получения результата постраничных данных. Операции, выполняемые в следующем:Создание динамического объекта с неизвестными типами свойств
public JsonResult GetNewRequests([ModelBinder(typeof(DataTablesModelBinder))] DataTablesPageRequest pageRequest)
{
var page = RequestsQuery(pageRequest); // Retrieves page of result from db and does any filtering + sorting
var pageResponse = DataTablesFormat.PageResponse(pageRequest, page); // Formats response for jQuery DataTable to use
return Json(pageResponse, JsonRequestBehavior.AllowGet); // Returns result
}
Ответ вернулся в DataTable управления JQuery в следующем формате:
return new
{
sEcho = pageRequest.Echo,
iTotalRecords = report.TotalItems,
iTotalDisplayRecords = report.TotalItems,
sColumns = pageRequest.ColumnNames,
aaData = results
};
Часть я работаю разрабатывает перечень типовых элементов для вернуться именно:
aaData = results
results
должен быть список любой модели объекта, включая все ее соответствующие свойства. Я пытался использовать reflection
вместе с ExpandoObject
, чтобы завершить это решение, но не могу понять механику:
public static object PageResponse(DataTablesPageRequest pageRequest, Page<object> report)
{
List<object> results = new List<object>();
foreach(var item in report.Items)
{
dynamic dynamicObject = new ExpandoObject();
Type type = item.GetType();
PropertyInfo[] properties = type.GetProperties();
foreach(PropertyInfo property in properties)
{
Type propertyType = property.PropertyType;
// Here is where I want to add a property with the correct name of the required type to the dynamic object
dynamicObject[property.Name] = property.GetValue(item, null) as propertyType;
}
results.Add(dynamicObject);
}
return new
{
sEcho = pageRequest.Echo,
iTotalRecords = report.TotalItems,
iTotalDisplayRecords = report.TotalItems,
sColumns = pageRequest.ColumnNames,
aaData = results
};
}
Я понял кое-что даже во время набора текста это. Часть я не могу понять:
dynamicObject[property.Name] = property.GetValue(item, null) as propertyType;
То есть, устанавливая тип недвижимости, например: DateTime
.
Повторяю. Я хочу построить список элементов модели. Это может быть любой тип модели с любым количеством свойств, каждый из которых может быть любого типа (int, string, bool, DateTime и т. Д.)
вы можете использовать 'Convert.ChangeType' вопрос в том, почему вы хотите сделать, что вы уже используете' dynamic', вы пытаетесь он прошел вместо интерфейса или что? – Luaan
Я отредактировал yo ур. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –