1

WebAPIコントローラーからJSONデータを返したいのですが、返されるデータは次のようになります。

{"rows":[{"id":1,"cell":["1","amila","amila","False"]},{"id":2,"cell":["2","rakhitha","rakhitha","False"]},{"id":3,"cell":["3","Chathura","Chathura","False"]},{"id":4,"cell":["4","Geethaga","Geethaga","False"]}]}

しかし、以下のコードを使用すると、

return new System.Web.Mvc.JsonResult()
        {
            Data = jsonData,
            JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet
        };

データは次のように返されます。

{"Data":{"rows":[{"id":1,"cell":["1","amila","amila","False"]},{"id":2,"cell":["2","rakhitha","rakhitha","False"]},{"id":3,"cell":["3","Chathura","Chathura","False"]},{"id":4,"cell":["4","Geethaga","Geethaga","False"]}]},"JsonRequestBehavior":0}

「データ」として追加のJSONキーがあります。そのパラメーターは必要ありません。実装として、この「データ」部分をクライアント側に取得した後、削除することはできません。サーバーから受信したデータは、jqGridを埋めるために直接使用されるためです。コードは以下のとおりです。

$("#Grid1").jqGrid({
            url: 'api/matchingservicewebapi/GetUser',
            datatype: 'json',
            mtype: 'GET',
            colNames: ['', 'Name', 'FullName', 'IsActive'],
            colModel: [
                { name: 'Id', index: 'Id', width: 200 },
                { name: 'Name', index: 'Name', width: 300 },
                { name: 'FullName', index: 'FullName', width: 300 },
                { name: 'IsActive', index: 'IsActive', width: 300 }
            ],
            rowNum: 10,
            rowList: [10, 20, 30],
            pager: '#pager',
            sortname: 'Id',
            viewrecoreds: true,
            sortorder: "desc",
            imgpath: 'Themes/images'
    }).navGrid(pager, { edit: true, add: true, del: true, refresh: true, search: true });

この「データ」部分を削除するにはどうすればよいですか?返されるJSONにこの「データ」キーがある場合、jqGridはそのデータをグリッドに入力できません。

このデータを返すためにWebAPIコントローラーを使用しています。しかし、MVC3コントローラーを使用してみたところ、この「データ」キーが返されたJSONに含まれず、データがグリッドに正常に入力されました。しかし、私はWebAPIコントローラーを使用したいと思います。これを解決するのを手伝ってください。

前もって感謝します。

4

5 に答える 5

13

JsonResultはMVCの概念です。Web APIの場合、コントローラーはCLRオブジェクトを返すだけで、JSONにシリアル化されます(クライアントがJSONを要求すると仮定します)。

表示されている結果は、JsonResultオブジェクト全体がJSONにシリアル化されているためです。

Web APIの使用を開始するには、http ://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-apiを参照してください。

(または、MVCコントローラーを引き続き使用できます... Web APIコントローラーを使用したい特別な理由はありますか?)

于 2012-07-13T05:03:08.860 に答える
4

Json.NETは私にとってうまく機能します。WebAPIでJObjectを返すだけです

http://james.newtonking.com/projects/json/help/html/CreatingLINQtoJSON.htm

JObject o = JObject.FromObject(new
{
  channel = new
 {
   title = "James Newton-King",
   link = "http://james.newtonking.com",
   description = "James Newton-King's blog.",
   item =
       from p in posts
       orderby p.Title
       select new
       {
         title = p.Title,
         description = p.Description,
         link = p.Link,
         category = p.Categories
    }

}})

于 2013-01-11T14:22:21.433 に答える
2

jqGridでjsonreaderオプションを設定します。お気に入り

jQuery("#gridid").jqGrid({
...
   jsonReader : {root:"Data"},
...
});

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieveing_data#json_string

于 2012-07-13T04:58:15.267 に答える
1

data.dコード内のデータの代わりに使用します。

 success: function(data){
               //create jquery object from the response html
               var response=$(data.d);
               //Your binding logic here
          }
于 2012-07-13T04:37:32.817 に答える
1

jqgridに必要な形式でデータを返すことができます。このために別のクラスを作成したくない場合は、apicontrollerで動的リターンタイプを使用してください。こちらの実例をご覧ください。

于 2012-08-31T02:24:27.597 に答える