C# 使用Json、jQuery和Ajax返回多个值
我试图使用两条linq to SQL语句将数据从数据库返回到数组,我可以在jQuery调用中使用该数据库。我可以让Json返回一个数组,但无法让它返回第二个数组,该数组包含我需要列出的数量 你看,我正在做的是创建一个树状视图,列出每个部分的区域、项目和子程序。每个区域都有总花费,每个项目都有总花费,每个子程序都有总花费。我已经能够得到子程序的总花费,但是项目是不同的,因为我必须使用显示子程序的相同控制器来显示每个项目的总额。看起来有点像这样C# 使用Json、jQuery和Ajax返回多个值,c#,ajax,arrays,json,linq-to-sql,C#,Ajax,Arrays,Json,Linq To Sql,我试图使用两条linq to SQL语句将数据从数据库返回到数组,我可以在jQuery调用中使用该数据库。我可以让Json返回一个数组,但无法让它返回第二个数组,该数组包含我需要列出的数量 你看,我正在做的是创建一个树状视图,列出每个部分的区域、项目和子程序。每个区域都有总花费,每个项目都有总花费,每个子程序都有总花费。我已经能够得到子程序的总花费,但是项目是不同的,因为我必须使用显示子程序的相同控制器来显示每个项目的总额。看起来有点像这样 地区-----一月--二月--三月--四月--五月--
地区-----一月--二月--三月--四月--五月--六月--七月--八月--九月--十月--十一月--十二月
+项目-----一月--二月--三月--四月--五月--六月--七月--八月--九月--十月--十一月--十二月
++子程序1--1--2--3--4--5--6--7--8--9--10--11--12
++子程序2--1--2--3--4--5--6--7--8--9--10--11--12
由于项目金额是子程序金额的总和,并且与列出子程序的位置不同,因此我很难填充第二个数组。下面的代码来自我的控制器,显示了我如何提取填充子程序名称的数组的数据
[Authorize]
public virtual ActionResult getAjaxPGs(string SP = null, string PG = null)
{
if (SP != null)
{
var PGList = from x in db.pg_mapping
where x.PG_SUB_PROGRAM == SP
select x;
//select x.PG.Distinct().ToArray(); // I wanted to combine the PGRow = line below with the linq to SQL code above but it didn't like the .ToArray()
var PGRow = PGList.Select(x => new { x.PG }).Distinct().ToArray();
return Json(PGRow, JsonRequestBehavior.AllowGet);
}
return View();
}
因此,这里的代码查找并输出子程序名称,以代替子程序1和子程序2。这一部分需要保留,以便输出正确的子程序名称,但现在我需要添加代码,以便在项目级别输出总量。我原以为我可以将这段代码添加到控制器并返回两个数组,但我做得不对,我尝试过的方法都不起作用
var AmountList=来自db.expense\u Web中的x
其中x.PG==PG
x组按新{x.会计期间,x.PG,x.金额}分为PG组
选择新建{accounting_period=pggroup.Key.accounting_period,amount=pggroup.Sum(x=>x.amount)}代码>
然后像这样把它还回去
返回Json(PGRow、AmountList、JsonRequestBehavior.AllowGet)代码>
这不起作用。它抛出了一个错误,该错误表示“System.Web.MVC.Controller.Json(object,string,System.Web.MVC.JsonRequestBehavior)”的最佳重载匹配有一些无效参数
我完全接受所有的建议,因为我尝试过的一切都不起作用;即使一个建议将我带入一个全新的方向。老实说,我只是需要一些关于如何实现预期结果的指导。我希望我已经清楚地表达了我的问题。谢谢你们的时间和专业知识,请不要犹豫,要求任何额外的代码或澄清,因为我会尽可能经常回来检查
更新
public class Container
{
Array PARow;
Array AmountList;
}
public virtual ActionResult getAjaxPGs(string SP = null, string PG = null)
{
var PGList = from x in db.pg_mapping
where x.PG_SUB_PROGRAM == SP
select x;
container.PGRow = PGList.Select(x => new { x.PG }).Distinct().ToArray();
container.AmountList = from x in db.Spend_Web
where x.PG == PG
group x by new { x.ACCOUNTING_PERIOD, x.PG, x.Amount } into pggroup
select new { accounting_period = pggroup.Key.ACCOUNTING_PERIOD, amount = pggroup.Sum(x => x.Amount) };
}
创建一个“container”类,该类包含希望返回的每个数据类型的实例
class Container
{
Array PGRow;
Array AmountList;
}
然后在代码中:
Container container = new Container();
container.PGRow = ....;
container.AmountList = ....;
这听起来应该是可行的,但是我在代码中的变量PGRow和AmountList下得到了红色的曲线,在json返回下得到了更多的曲线,我已经在上面的代码中添加了更新的代码。有什么建议吗?在上面更新的代码中,似乎需要将“container”变量声明为container的实例。另外,请注意,您的javascript将接收一个复杂的对象,因此需要更新代码。