我正在尝试从 int 类型的 JSON 数组中传递第二个变量。到目前为止,我只能将SP_NAME
(它是一个字符串)变量传递出去,但现在我还需要SP_ID
从控制器传递出去,这样 jQuery 就知道将信息放在哪里。
下面是控制器代码。我认为问题出在两行,我添加了 <------ 箭头向你们展示。
[Authorize]
public virtual ActionResult getAjaxSPs(string MP = null)
{
if (MP != null)
{
var SPList = from x in sp_index select x;
var MPData = from y in mp_index
where y.MP_NAME == MP
select y;
SPList = SPList.Where(x => x.MP_ID == MPData.FirstOrDefault().MP_ID);
var SPRow = SPList.Select(x => new { x.SP_NAME, x.SP_ID }).Distinct().ToArray(); // <------- SPRow returns two variable SP_NAME and SP_ID (ex. Program1, 30)
float[] SPContent = new float[12];
Dictionary<string, float[]> SPMonthRow = new Dictionary<string, float[]>();
foreach (var item in SPRow)
{
SPContent = new float[12];
var SPMonthList = from x in Full_Year_Numbers
where x.PROJECT_NAME == item.SP_NAME
group x by new { x.ACCOUNTING_PERIOD, x.PROJECT_NAME, x.AMOUNT } into spgroup
select new { accounting_period = spgroup.Key.ACCOUNTING_PERIOD, amount = spgroup.Sum(x => x.AMOUNT) };
foreach (var mulan in SPMonthList)
{
int acounting_period = int.Parse(mulan.accounting_period) - 1;
SPContent[acounting_period] = (float)mulan.amount / 1000000;
}
SPMonthRow[item.SP_NAME] = SPContent;
}
return Json(SPMonthRow, JsonRequestBehavior.AllowGet); //<--------- This is where I need to return two variables so I can use them both in the Jquery
}
return View();
}
所以在这一SPRow
行中,我得到了我需要的键和值(program1、30)。我需要访问SP_ID
JSON 返回中的 ,这样我就可以像这样在我的 jQuery 中使用它。
<div class = "sp-label" title = "' + SP + '" sub_program_id="' + SP.SP_ID + '" onclick="sp_click(this)">' + SP + '</div>'
我以为我可以item.SP_ID
像SPMonthRow
这样添加
SPMonthRow[item.SP_NAME, item.SP_ID] = SPContent;
但是,当我尝试再次构建时,我收到了这个错误
no overload for method 'this' takes 2 arguments
这个错误让我相信我错误地定义了字典,我的想法是正确的还是我偏离了轨道?是否有另一种方法可以SP_ID
进入 jQuery 中使用的 JSON 数组?老实说,我对SP_ID
摆脱该控制器的任何和所有建议持开放态度。我已经在谷歌上搜索了一段时间,不知道如何解决像我这样的问题。感谢您的帮助,如果您需要任何其他代码或信息来帮助诊断问题,请告诉我。
更新 1
foreach (var item in SPRow)
{
SPContent = new float[12];
var SPMonthList = from x in act.WPD_Full_Year_Actuals
where x.PROJECT_NAME == item.SP_NAME
group x by new { x.ACCOUNTING_PERIOD, x.PROJECT_NAME, x.AMOUNT } into spgroup
select new { accounting_period = spgroup.Key.ACCOUNTING_PERIOD, amount = spgroup.Sum(x => x.AMOUNT) };
foreach (var mulan in SPMonthList)
{
int accounting_period = int.Parse(mulan.accounting_period) - 1;
SPContent[accounting_period] = (float)mulan.amount / 1000000;
}
dynamic result = new
{
Name = item.SP_NAME,
Id = item.SP_ID
};
SPMonthRow[result] = SPContent;
}
return Json(SPMonthRow, JsonRequestBehavior.AllowGet);
}
return View();
}
更新 2
这是此函数中使用的表的架构
public partial class sp_catalog
{
public int SP_ID { get; set; } //primary key
public Nullable<int> MP_ID { get; set; }
public Nullable<int> IA_ID { get; set; }
public string SP_NAME { get; set; }
}
public partial class mp_catalog
{
public int MP_ID { get; set; } //primary key
public Nullable<int> IA_ID { get; set; }
public string MP_NAME { get; set; }
}
public partial class Full_Year_Actuals
{
public string ACCOUNTING_PERIOD { get; set; }
public Nullable<decimal> AMOUNT { get; set; }
public string PROJECT_NAME { get; set; }
public int ID_actuals { get; set; }
}
更新 3
我曾尝试使用动态结果类,但这对我不起作用,因为我无法使用 GameScripting 提供给我的代码。我不能使用它的原因是因为我需要使用 SQL DB 来为我提供数据。我无法对任何数据进行硬编码,因为它在不断变化。
我想要的只是能够返回SP_NAME
,SP_ID
以及SPContent
通过 JSON 输入的金额。原因是在我的 jQuery 中,我使用SP_NAME
输出子程序的名称(例如 . "subProgram1"
)。我SP_ID
用来让 jQuery 知道将子程序放在哪个程序下(例如,如果SP_ID = 1
子程序在 program1 下)。其中包含的金额是在循环SPContent
中输入的每月总计。foreach
(program1 Jan Feb Mar
subProgram1 $100 $200 $300 etc...)`
这一切意味着我不能丢失这条线SPMonthRow[item.SP_NAME] = SPContent;
,除非我能SPContent
以另一种方式输出数量数据。我对所有解决方案持开放态度,只要我可以保持数据从 JSON 中的函数流出,这样 jQuery 就可以显示我需要的内容。很抱歉这篇文章我只是想确保任何想帮助我的人都有这样做所需的信息。当我经常检查我的问题的状态时,请随时提出任何问题或提出任何代码请求。谢谢您的帮助!