Какой правильный шаблон Ajax для использования DataTable jQuery с ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/4201849

Вопрос

У меня есть 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top