2017-03-29 40 views
1

我不完全確定如何定義這個問題,但基本上我正在開發一個ASP.Net應用程序,我在這裏生成一個名爲IndexJsonJsonResult我如何返回一個列表到JSON以及硬編碼的根

我的代碼如下:

public JsonResult IndexJson() 
{ 
    var contacts = (from x in db.ContactSet 
        select new 
        { 
         x.AccountId, 
         x.FirstName, 
         x.LastName, 
         x.FullName, 
         x.JobTitle, 
         x.ParentCustomerId, 
         x.EMailAddress1, 
         x.Telephone1, 
         x.MobilePhone, 
         x.Fax, 
         x.GenderCode, 
         x.BirthDate 
        }).ToList(); 

    return Json(contacts, JsonRequestBehavior.AllowGet); 
} 

這在返回以下JSON效果很好:

[{/*contact info*/}, {/*contact info*/}, {/*contact info*/}, ...] 

但現在我想返回以下JSON(硬編碼現在,我稍後將改變數值):

{ 
    "current": 1, 
    "rowCount": 10, 
    "rows": [{/*contact info*/}, {/*contact info*/}, {/*contact info*/}, ...], 
    "total": 1123 
} 

我該如何適應我的代碼來做到這一點?

回答

4

簡單包裝所有進入新的匿名對象

return Json(new { current = 1, rowCount = 10, rows = contacts, total = 1123 }, 
      JsonRequestBehavior.AllowGet 
      ); 
+0

這是一個很乾淨的修復!非常感謝:) –

0

你可能想定義(通用)類型來存儲你的額外領域和項目的名單

public class ItemsWithTotal<T> // for pete sake find a better name! 
{ 
    public int Current {get; set; } 
    public int RowCount {get; set; } 
    public int Total {get; set; } 
    public List<T> Rows {get; set; } 
} 

用法是

var contacts = (from x in db.ContactSet 
       select new 
       { 
        x.AccountId, 
        x.FirstName, 
        x.LastName, 
        x.FullName, 
        x.JobTitle, 
        x.ParentCustomerId, 
        x.EMailAddress1, 
        x.Telephone1, 
        x.MobilePhone, 
        x.Fax, 
        x.GenderCode, 
        x.BirthDate 
       }).ToList(); 
var result = new ItemsWithTotal<ContactSet>(){ 
    Current = 1, 
    RowCount = 10, 
    Total = 1123, 
    Rows = contacts 
} 
return Json(result); 
0

您可以創建一個視圖模型看起來相同。即

public MyReturnModel{ 
     public int Current {get; set;} 
     public int rowCount {get; set;} 
     public List<contacts> rows {get; set;} 
     public int total {get; set;} 
    } 

然後在您的方法中,恰當地分配每個屬性並返回JSONify新的viewmodel並返回它。

1

看起來你正在使用jQuery的網格狀jQuery Bootgrid至少由你所需要的輸出的外觀。

如果那是這種情況,您可以執行以下操作。

1創建你需要

輸入的數據類型來控制

public class RequestData 
     { 
      public int current { get; set; } 
      public string rowCount { get; set; } 
     /*Any other fields that come from the api*/ 
     } 

輸出需要

public class ResponseData<T> where T : class 
    { 
     public int current { get; set; } // current page 
     public int rowCount { get; set; } // rows per page 
     public T rows { get; set; } // items 
     public int total { get; set; } // total rows for whole query 
    } 

2把一切融合在一起

public JsonResult IndexJson(RequestData model) 
{ 
    var contacts = (from x in db.ContactSet 
    select new 
    { 
     x.AccountId, 
     x.FirstName, 
     x.LastName, 
     x.FullName, 
     x.JobTitle, 
     x.ParentCustomerId, 
     x.EMailAddress1, 
     x.Telephone1, 
     x.MobilePhone, 
     x.Fax, 
     x.GenderCode, 
     x.BirthDate 
    }).ToList(); 

    var tResult = 
     ResponseData<YourObjectType>() 
     { 
      current = model.current, 
      rowCount = model.rowCount, 
      rows = contacts, 
      total = contacts.Count 
     }; 

    return Json(tResult, JsonRequestBehavior.AllowGet); 
} 
+0

'YourObjectType'應該是什麼? –

+0

@BarryMichaelDoyle行(聯繫人)相同的管道。例如。 '列表觸點=新... 變種tResult = ResponseData <列表>() { 電流= model.current, rowCount時= model.rowCount, 行=接觸 總= contacts.Count };' 在你的情況下,它看起來像是'List '的通用列表。不是嗎? – bmvr

+0

我很困惑,我在這裏提出了一個新問題:http://stackoverflow.com/questions/43103990/how-to-deal-with-jquery-bootgrid-request-data-in-mvc 這與此有關更徹底。 –

相關問題