Каков правильный шаблон AJAX для использования jQuery DataTable с ASP.NET MVC? - PullRequest
1 голос
/ 17 ноября 2010

У меня есть jQuery DataTable , настроенный для обработки на стороне сервера на сервере ASP.NET MVC.

Чтобы добиться прогрессивного улучшения, HTML-таблица визуализируется, а затем обновляется до DataTable. Когда DataTable выполняет AJAX-вызов для получения большего количества данных, он ожидает, что элементы возвращенного JSON будут коррелировать с существующим макетом столбца таблицы.

Это , кажется, вызывает некоторое архитектурное трение, потому что:

Во время начального отображения страницы:

  • Контроллер преобразует данные базы данных в DTO и устанавливает модель ViewData.
  • ViewPage преобразует модель ViewData в HTML с помощью HtmlHelper и т. Д.

Обновления Duriung AJAX:

  • Контроллер преобразует данные базы данных в данные ячейки таблицы с гиперссылками и т. Д.
  • DataTable отображает возвращенные данные непосредственно в ячейки таблицы.

Суть в том, что Контроллер теперь вынужден знать о макете рендеринга таблицы, когда его ответственность должна быть ограничена передачей DTO.

Что такое правильный шаблон здесь? Как мне поддерживать вызовы AJAX и придерживаться принципала единой ответственности в контроллере?


Некоторая ясность:

У моего DTO есть три свойства:

public class AccountListing
{
    public int Id { get; set; }
    public string AccountCode { get; set; }
    public string AccountName { get; set; }
}

Отображаемая таблица данных имеет четыре столбца:

+--------------+--------------+------+------+
| Account Code | Account Name | View | Edit |
+--------------+--------------+------+------+
| 12345        | FooBar Inc.  | Link | Link |
+--------------+--------------+------+------+

ViewPage отображает DTO с 3 свойствами в таблицу с 4 столбцами. Если контроллер передает обратно то же свойство DTO, что и AJAX JSON, то таблица данных жалуется на отсутствующие столбцы ... таблица данных ожидает, что возвращенный JSON будет представлять элементы ячейки, а не исходные данные.

В настоящее время я решаю эту проблему, используя преобразования массива jQuery и пользовательский рендеринг таблиц, что эффективно дублирует логику ViewPage.

Есть ли альтернатива?

1 Ответ

1 голос
/ 19 ноября 2010

Ваше текущее решение (выполнение рендеринга на стороне клиента) звучит хорошо для меня.

Дело в том, что ваши DTO не обязательно должны соответствовать тому, что отображают ваши страницы просмотра.Популярный шаблон имеет объекты 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] , [модель-вид-вид-модель].

...