ASP.NET MVC で jQuery DataTable を使用するための正しい AJAX パターンは何ですか?
-
25-09-2019 - |
質問
jQueryを持っています データ表 ASP.NET MVC サーバーに対するサーバー側の処理用に構成されています。
段階的な拡張を実現するには、HTML テーブルがレンダリングされ、その後 DataTable にアップグレードされます。DataTable が AJAX 呼び出しを行ってさらにデータを取得する場合、返される JSON の要素が既存のテーブル列レイアウトと相関していることが期待されます。
これ らしい 次の理由により、アーキテクチャ上の摩擦が発生します。
最初のページのレンダリング中:
- コントローラーはデータベース データを DTO に変換し、ViewData モデルを確立します。
- ViewPage は、HtmlHelper などを使用して ViewData モデルを HTML に変換します。
AJAX 更新中:
- コントローラーは、ハイパーリンクなどを使用して、データベース データをテーブル セル データに変換します。
- DataTable は、返されたデータをテーブルのセルに直接レンダリングします。
ここでのポイントは、コントローラが責任を負っている場合、テーブル レンダリング レイアウトについて強制的に知る必要があるということです。 すべき DTO のパスバックに限定されます。
それは何ですか 正しい ここのパターン?AJAX 呼び出しをサポートし、コントローラーの単一責任プリンシパルを遵守するにはどうすればよいですか?
ある程度の明確さ:
私の DTO には 3 つのプロパティがあります。
public class AccountListing
{
public int Id { get; set; }
public string AccountCode { get; set; }
public string AccountName { get; set; }
}
レンダリングされた DataTable には 4 つの列があります。
+--------------+--------------+------+------+
| Account Code | Account Name | View | Edit |
+--------------+--------------+------+------+
| 12345 | FooBar Inc. | Link | Link |
+--------------+--------------+------+------+
ViewPage は、3 つのプロパティ DTO を 4 列のテーブルにレンダリングします。コントローラーが同じ 3 つのプロパティ DTO を AJAX JSON として返すと、データ テーブルで列が欠落しているというエラーが発生します。データ テーブルは、ソース データではなく、返された JSON がセル要素を表すことを期待します。
現在、私は jQuery 配列変換と ViewPage のロジックを効果的に複製するカスタム テーブル レンダリングを使用してこれを解決しています。
代替手段はありますか?
解決
あなたの現在のソリューション(クライアント側でレンダリングを行う)は私には良いように思えます。
問題は、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;
}
}
見る [ビューモデル], [モデル-ビュー-ビューモデル].