У меня есть jQuery DataTable, настроенный для обработки на стороне сервера на сервере ASP.NET MVC.
Для достижения прогрессивного улучшения таблица HTML визуализируется, а затем обновляется до DataTable. Когда DataTable выполняет вызов AJAX для получения дополнительных данных, он ожидает, что элементы возвращенного JSON будут коррелировать с существующим макетом столбца таблицы.
Это кажется причиной некоторых архитектурных разногласий, потому что:
Во время начального рендеринга страницы:
- Контроллер преобразует данные базы данных в DTO и устанавливает модель ViewData.
- ViewPage преобразует модель ViewData в HTML с помощью HtmlHelper и т. д.
Во время обновлений AJAX:
- Контроллер преобразует данные базы данных в данные ячеек таблицы с гиперссылками и т. д.
- DataTable визуализирует возвращенные данные непосредственно в ячейки таблицы.
Дело в том, что контроллер теперь вынужден знать о макете рендеринга таблицы, тогда как его ответственность должна ограничиваться передачей обратно DTO.
Какой здесь правильный шаблон? Как поддерживать вызовы AJAX и придерживаться принципа единой ответственности в контроллере?
Некоторая ясность:
Мой DTO имеет три свойства:
public class AccountListing
{
public int Id { get; set; }
public string AccountCode { get; set; }
public string AccountName { get; set; }
}
Визуализированная DataTable имеет четыре столбца:
+--------------+--------------+------+------+
| Account Code | Account Name | View | Edit |
+--------------+--------------+------+------+
| 12345 | FooBar Inc. | Link | Link |
+--------------+--------------+------+------+
ViewPage отображает DTO с 3 свойствами в таблицу с 4 столбцами. Если контроллер возвращает те же 3 свойства DTO, что и AJAX JSON, таблица данных жалуется на отсутствующие столбцы... таблица данных ожидает, что возвращенный JSON будет представлять элементы ячейки, а не исходные данные.
В настоящее время я решаю это, используя преобразования массива jQuery и настраиваемый рендеринг таблицы, который эффективно дублирует логику ViewPage.
Есть ли альтернатива?