ASP.NET MVC で jQuery DataTable を使用するための正しい AJAX パターンは何ですか?

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

質問

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;
    }
}

見る [ビューモデル], [モデル-ビュー-ビューモデル].

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top