バックグラウンド:
ビューでは、(jquery と ajax を介して) コントローラーにデータベースからのデータを要求します。データは Json として返されますが、コントローラーの JsonResult で適切に設定されていても、不明な理由で Json オブジェクトの一部が null として返されます。
コード:
JsonResult として返されるクラス
public class InData
{
public InData() { }
public AppsWithActions[] apps { get; set; }
public User[] users { get; set; }
public string timePeriod { get; set; }
public string startDate { get; set; }
public string endDate { get; set; }
public string dataType { get; set; }
}
問題は、次のクラスの文字列配列 actionIds と actionNames が、JsonResult に正しい値があるにもかかわらず、javascript で null になることです。
public class AppsWithActions
{
public AppsWithActions() { }
public string id { get; set; }
public string name { get; set; }
public string[] actionIds { get; set; }
public string[] actionNames { get; set; }
}
InData を設定し、それを JavaScript に返すコントローラー関数:
//Takes a goal setting, turns it to indata and returns a JsonResult
public JsonResult GetIndataFromGoalSettingId(SettingId settingId)
{
var id = ToGuid(settingId.idString);
GoalSetting setting = Session.Query<GoalSetting>()
.Where(x => x.Id == id)
.FirstOrDefault();
var indata = TransformGoalSettingToInData(setting);
return Json(new { returnvalue = indata }, JsonRequestBehavior.AllowGet);
}
apps.actionIds と apps.actionNames を除くすべてを正しく返す ajax 呼び出し
function getIndataFromGoalSettingId(settingId) {
if (settingId != null) {
settingIdIn = { "idString": settingId};
$.ajax({
type: "POST",
async: false,
traditional: true,
url: 'GetIndataFromGoalSettingId',
data: JSON.stringify(settingIdIn),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) {
//...
}
});
}
}
データを取得し、それを Json として JavaScript に返すために、同じ種類のインフラストラクチャを使用して成功したことは言うまでもありませんが、より良い提案がある場合は、遠慮なく詳しく説明してください。