【发布时间】:2018-01-05 01:06:24
【问题描述】:
我最接近找到答案的地方是:https://stackoverflow.com/a/16295052/608674
问题是我不知道如何动态设置根名称。
使用 w3widget 响应式日历。日历使用带有许多子对象的 javascript 对象。像这样:
$(".responsive-calendar").responsiveCalendar({
events: {
"2018-04-30": {
"number": 5,
"badgeClass": "badge-warning",
"url": "http://w3widgets.com/responsive-calendar"
},
"2018-04-25": {
"number": 1,
"badgeClass": "badge-warning",
"url": "http://w3widgets.com/responsive-calendar"
},
"2018-04-03": {
"class": "active special",
"url": "http://w3widgets.com/responsive-calendar"
},
"2018-04-26": {
"number": 2,
"badgeClass": "badge-warning",
"url": "http://w3widgets.com"
},
"2018-05-03": {
"number": 1,
"badgeClass": "badge-error"
},
"2018-06-12": {}
}
});
我试图通过从控制器返回一个字符串列表来绕过这个问题,但这不起作用...我不确定如何将每个字符串添加到具有正确根名称的“事件”JavaScript 对象中。
var jsonEvent = string.Format("'{0}: {{'" +
"'class' : '{1}'," +
"'link' : '{2}'," +
"'link_target' : '{3}," +
"'title' : '{4}'," +
"'location' : '{5}'," +
"'date' : '{6}'," +
"'desc' : '{7}'," +
"'count' : '{8}'," +
"'event_id' : '{9}'" +
"}},",
evnt.StartDate.AddDays(i).ToString("yyyy-MM-dd"),
GetEventClass(evnt.Id, i, dayCount),
evnt.EventUrl,
hasLink,
evnt.Name,
evnt.Location,
dateString,
evnt.Description,
i,
eventId);
我尝试将字符串放入事件变量中,如下所示:
var actionUrl = '@Url.Action("GetJsonEvents", "EventsSurface", new { pageId = Model.Id })';
$.getJSON(actionUrl).done(function (data) {
$.each(data.items, function (index, item) { event[index] = value; });
});
当然这似乎是错误的,因为它会给根名称提供 index 的值。
我也尝试将数据添加到名为“events_data”的变量中并像另一个问题events: Json.Parse(events_data) 中建议的那样解析它,但这似乎不起作用......可能是因为我没有返回来自控制器的正确数据。
对我来说很明显,我对这个过程还不够了解。我知道我没有使用 JSON 对象,因此在尝试将数据从控制器传回视图时让我感到困惑......
当然,部分问题是我从控制器返回字符串列表,如下所示:return Json(eventList, JsonRequestBehavior.AllowGet);
我不知道如何将数据返回给 ajax 调用并将其放入 JavaScript 对象中。
编辑:1/518 12.32
在控制器中使用 Dictionary 对象是可行的。我必须为 Json 事件对象创建一个类,因为名称“类”在 C# 中是保留的,我不能使用匿名对象。我在尝试用 JsonProperty 属性装饰类属性时遇到了问题......
private class JsonEvent
{
[JsonProperty (PropertyName = "class")]
public string Class { get; set; }
public string link { get; set; }
...}
因为我还在使用return Json(..., ...),它是.net 序列化而不是Newtonsoft。我只需要使用 Json 进行序列化并返回内容:return Content(JsonConvert.SerializeObject(eventList), "application/json");。
在视图中,当我JSON.stringify(data) 时,事件对象看起来很完美。不幸的是,当我尝试使用响应日历中的数据时,它仍然不起作用。
到目前为止,我已经尝试过:
event_data = data;
event_data = JSON.stringify(data);
整个 ajax 调用看起来像:
var events_data = {};
$.getJSON(actionUrl, events_data).done(function (data) {
console.log(JSON.stringify(data));
events_data = Json.parse(data);
});
当然,日历只是调用event: events_data
已解决 1/5/18 13.54
所以,是的,控制器中的字典是要走的路。我正在使用其他人的 JavaScript 代码。他们对数据进行了硬编码。这表明日历在 ajax 调用完成之前正在加载和调用事件数据。
所以events_data = data 工作得很好。
【问题讨论】:
标签: javascript c# controller