int 型の JSON 配列から 2 番目の変数を渡そうとしています。SP_NAME
これまでのところ、 (文字列である) 変数を渡すことしかできませんでしたがSP_ID
、jQuery が情報を配置する場所を認識できるように、コントローラーからも渡す必要があります。
以下はコントローラーのコードです。問題が発生していると思われる行が 2 行あり、<------ 矢印を追加して皆さんにお見せしました。
[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
このように jQuery で使用できるように、JSON リターンで にアクセスする必要があります。
<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 を使用してデータを提供する必要があるためです。データは常に変化しているため、データをハードコーディングすることはできません。
私が望むのは、JSON を介してSP_NAME
とSP_ID
金額を返せるようにすることだけです。SPContent
この理由は、私の jQuerySP_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
jQueryが必要なものを表示できるように、JSONの関数からデータが流れ続けることができる限り、私はすべてのソリューションにオープンです。エッセイで申し訳ありませんが、私を助けたい人がそうするために必要な情報を持っていることを確認したいだけです. 質問のステータスを頻繁にチェックするので、質問やコードのリクエストをお気軽にどうぞ。ご協力ありがとうございました!