2017-11-08 4 views
0

通常のシナリオでは、剣道MVC Razorやその他のグリッドは、コントローラがDataSourceRequestをコレクションのDataSourceResultに渡してJson結果は以下のようになります剣道MVCカミソリグリッドコントローラからむしろ単一のモデルを渡す方法

public ActionResult GetData([DataSourceRequest] DataSourceRequest request, string taskKey) 
    { 
     var query = eSerivce.GetData(taskKey); 
     var result = query.modelCollection.ToDataSourceResult(request); 
     return Json(result, JsonRequestBehavior.AllowGet); 
    } 

上記のコードは、あらゆる種類のコレクションでうまく動作し、グリッドはデータを細かく表示します。

私のシナリオでは、単一のモデルがサービスレイヤーのコレクションではなく、単一のエンティティで利用できるToDataSourceResultがないため、DataSourceRequestを渡すことができないため、DataSourceRequestを渡すことができません。 。

私は、クエリを返す時には、上記のスニペットで

public ActionResult GetData([DataSourceRequest] DataSourceRequest request, string taskKey) 
    { 
     var query = eSerivce.GetData(taskKey); 
     var result = query. // no ToDataSourceResult available here because of single model 
     return Json(query, JsonRequestBehavior.AllowGet); 
    } 

なしToDataSourceResult利用可能であるように、グリッドは、任意のデータをレンダリングいけません。私は、単一のモデルエンティティをコレクションに変換して、必要な操作を適用できることを知っていますが、この状況に対処する他の方法があるかどうかは不思議です。レコードを1つだけ返す主な理由は、行展開のカスタムテンプレート行の親グリッドの過剰な情報を表示することです。別の方法で

+2

は '「私が知っていれば私がすることができます私の単一のモデル実体をコレクションに変換する " - それが私のやり方です。フレームワークコンポーネントが(グリッドとして)コレクションを期待している場合は、コレクションに渡します。 1つの要素によって作成されたコレクションはまだコレクションです。そして、私は、コレクション以外のオブジェクトにバインドするようにコンポーネントを変更しようとするよりもかなり簡単に想像しています。 – David

+0

この方法で親レコードに関する追加情報を表示している場合、なぜ子テンプレートのグリッドを使用していますか?非コレクションモデルに適したコントロールを使用できませんでしたか? –

+0

@RossBushグリッドは、行展開でオンデマンドajax呼び出しを送信するために使用されます。この目的のために他にどのようなコントロールを提案しますか?テンプレート内のテンプレートに入っているので、jQueryのajax呼び出しを起動するだけでは、テンプレートの@タグに書かれているように書くことはできません。 –

答えて

0

剣道データソース(だけではなくグリッド)の配列を期待し、リターンモデル:

かの単純なリスト:

return Json(new[] { query }, JsonRequestBehavior.AllowGet); 

またはtype: "aspnetmvc-ajax"

return Json(new[] { query }.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
関連する問題