我最接近找到答案的地方是:https://stackoverflow.com/a/16295052/608674
问题是我不知道如何动态设置根名称。
使用 w3widget 响应式日历。日历使用带有许多子对象的 JavaScript 对象。像这样:
$(".responsive-calendar").responsiveCalendar({
事件:{
“2018-04-30”:{
“数量”:5,
"badgeClass": "徽章警告",
“url”:“http://w3widgets.com/responsive-calendar”
},
“2018-04-25”:{
“1号,
"badgeClass": "徽章警告",
“url”:“http://w3widgets.com/responsive-calendar”
},
“2018-04-03”:{
"class": "活跃特别",
“url”:“http://w3widgets.com/responsive-calendar”
},
“2018-04-26”:{
“2号,
"badgeClass": "徽章警告",
“url”:“http://w3widgets.com”
},
“2018-05-03”:{
“1号,
“badgeClass”:“徽章错误”
},
“2018-06-12”:{}
}
});
我试图通过从 Controller 返回字符串列表来绕过这个问题,但这不起作用...我不确定如何使用正确的根名称将每个字符串添加到“事件”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; });
});
当然,这似乎是错误的,因为它会给根名称提供索引值。
我还尝试将数据添加到名为“events_data”的变量中,并按照另一个问题 events: Json.Parse(events_data)
中的建议将其解析出来,但这似乎并不可行工作...可能是因为我没有从 Controller 正确返回数据。
对我来说,显然我对这个过程还不够了解。我知道我没有使用 JSON 对象,因此当我尝试将数据从 Controller 传递回 View 时,这让我感到困惑......
当然,问题的一部分是我从 Controller 返回字符串列表,如下所示:return Json(eventList, JsonRequestBehavior.AllowGet);
我不知道如何将数据返回到 ajax 调用并将其放入 JavaScript 对象中。
编辑:1/518 12.32
在 Controller 中使用 Dictionary 对象是可行的。我必须为 Json 事件对象创建一个类,因为名称“class”在 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");
。
在 View 中,当我 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);
});
当然,日历只是调用事件:events_data
已解决 2018 年 1 月 5 日 13.54
所以,是的, Controller 中的字典是正确的选择。我正在用 JavaScript 处理别人的代码。他们对数据进行了硬编码。我们发现日历在 ajax 调用完成之前正在加载并调用事件数据。
所以events_data = data
工作得很好。
最佳答案
您是否尝试过从 Controller 传递字典?如果这不起作用,您可能必须使用经典的 ASHX 处理程序和 ResponseWrite JSON 对象来执行您想要的操作。
我不确定是否返回 Dictionary<string, event>
其中日期字符串是关键, Controller 可以执行您想要或不执行的操作,但值得一试。不过,从通用处理程序中 ResponseWrite 也不难。
关于javascript - 如何使用 C# 从 Controller 动态设置 JavaScript 对象的根名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48105816/