背景:
在视图中,我们(通过 jquery 和 ajax)向控制器询问数据库中的数据。数据以 Json 形式返回,但由于未知的原因,Json 对象的一部分返回为 null,即使它在控制器的 JsonResult 中正确设置。
编码:
要作为 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 在 javascript 中为空,即使它们在 JsonResult 中具有正确的值:
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);
}
ajax 调用返回一切正确,除了apps.actionIds 和apps.actionNames
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,但是如果有人有更好的建议,请随时说明!