2013-09-18 2 views
1

Привет,Возвращение нескольких объектов JSON из MVC (Ajax/JQuery)

Мы используем MVC/JQuery для одного веб-приложения: В одном экране пользователи могут создавать диаграммы. В настоящее время требуется следующее:

1) Выбрать График критериев. (Диапазон клиентов/дат/ось диаграммы и т. Д.)

2) Нажмите «Создать» Кнопка ... Которая далее делает вызов JQuery, а затем получает данные с сервера через Ajax Call.

3)

public JsonResult GetDayData([DataSourceRequest]DataSourceRequest request, 
     string clientID, DateTime? startDate, DateTime? endDate, string SortOrder)) 
{ 
    //Makes a call to Stored Procedure 
    Stored procedure runs and return multiple datatables (ds.tavles[0], ds.tables[1] etc. 
} 

4) На основании этих DataTables мы должны обновления/создания 4-5 диаграмм (предполагая, что 4-5 DataTables будут возвращены из хранимой процедуры)

5) Я могу return dataTable[0] и создать диаграмму, но я не могу найти, как вернуть несколько объектов Json в один вызов и как обращаться с ними в JQuery/Ajax.

Один из подходов состоит в том, чтобы сделать отдельный для каждого контроллера диаграммы и возвращать объекты Json, но я не хочу делать несколько вызовов хранимой процедуры.

Любые предложения о том, как я могу вернуть несколько объектов DataTable/or class из MVC в Ajax Call?

e.g: Each Json objects can have a same or different structure 
DataTable 1: {Category: “A”, Points:20, Percentage:87} 
     {Category: “B”, Points:20, Percentage:87} 

DataTable 1: {Category: “A”, Spots:20, Percentage:87,ExtraInfo: “NA”} 
     {Category: “B”, Spots:20, Percentage:87,ExtraInfo: “NA”} 

Благодаря

+0

Вы можете вернуть только одну строку JSON, так что есть параметр для каждой таблицы данных, например. '[{dt1: {/ * stuff * /}, dt2: {/ * stuff * /}}];' –

ответ

1

Я предлагаю вам попробовать таким образом

[HttpPost] 
public JsonResult Action() 
    { 
     MyClass objMyClass = new MyClass(); 
     objMyClass.lstTables = new List<System.Data.DataTable>(); 
     objMyClass.lstTables.Add(new System.Data.DataTable()); 
     objMyClass.lstTables.Add(new System.Data.DataTable()); 
     return Json(objMyClass); 
    } 
    public class MyClass 
    { 
     public List<System.Data.DataTable> lstTables { get; set; } 
    } 

Теперь вы можете передать п число таблиц

+0

Спасибо. это сработало :) – user2739418

0

Вы можете вернуть массив в один объект JSON (сделать это в приложении или возвращать один результат obkect из базы данных, если вам нравится), как:

{ 
    [ 
    {data for table 1}, 
    {data for table 2}, 
    ... 
    ] 
} 

Или, если он отличается типы, как

{ 
    [ 
    {ChartType1: Type1, Data: {data for table 1}}, 
    {ChartType2: Type2, Data: {data for table 2}}, 
    ... 
    ] 
} 
Смежные вопросы