Какой правильный шаблон Ajax для использования DataTable jQuery с ASP.NET MVC?
-
25-09-2019 - |
Вопрос
У меня есть jquery Таблица данных Настроен для обработки на стороне серверов на сервере ASP.NET MVC.
Для достижения прогрессирующего усиления HTML-таблица отображается, а затем обновляется до DataTable. Когда DataTable делает вызов AJAX для восстановления дополнительных данных, он ожидает элементов возвращенного JSON для коррелята с существующей макетом столбца таблицы.
Этот кажется вызвать некоторое архитектурное трение, потому что:
Во время начальной рендеринга страницы:
- Контроллер преобразует данные базы данных в DTOS и устанавливает модель ViewData.
- ViewPage преобразует модель ViewData в HTML с помощью HTMLHELPER и т. Д.
Обновления Duriung Ajax:
- Контроллер преобразует данные базы данных в данные таблицы с гиперссылками и т. Д.
- DataTable отображает возвращенные данные непосредственно в табличные клетки.
Дело здесь заключается в том, что контроллер теперь вынужден знать о макете по рендерингу таблицы, когда это ответственность должен быть ограничиваться прохождением DTOS.
Что то правильный Узор здесь? Как я могу поддержать вызовы 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 оказывает 3 свойства Dто в таблицу 4 столбца. Если контроллер вернет один и тот же 3 свойства DTO AS AJAX JSON, таблица данных жалуется на пропущенные столбцы ... Таблица данных ожидает возврата JSON для представления элементов ячейки, в отличие от исходных данных.
В настоящее время я решаю это используя преобразования Array jQuery и пользовательскую рендеринг таблицы, что эффективно дублирует логику Viewpage.
Есть ли альтернатива?
Решение
Ваше текущее решение (выполнение рендеринга на стороне клиента) звучат для меня.
Дело в том, что ваши DTOS не должны соответствовать тому, что отображение ваших страниц вашего представления. Популярная модель имеет объекты ViewModel для этих ситуаций.
Например :
public class AccountListingViewModel {
public string AccountCode { get; set; }
public string AccountName { get; set; }
public string ViewLink { get; set; }
public string EditLink { get; set; }
public static AccountListingViewModel FromAccountListing(AccountListing o) {
AccountListingViewModel returnObj = new AccountListingViewModel();
//populate the properties from the parameter
return returnObj;
}
}
Видеть ViewModel, Model-View-ViewModel.