【问题标题】:How to set root name of JavaScript object dynamically from controller using c#如何使用 c# 从控制器动态设置 JavaScript 对象的根名称
【发布时间】: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


    【解决方案1】:

    您是否尝试过从控制器传递字典?如果这不起作用,您可能必须使用经典的 ASHX 处理程序并 ResponseWrite JSON 对象来执行您想要的操作。

    我不确定从控制器返回一个日期字符串是键的Dictionary<string, event> 是否会做你想做的事,但值得一试。不过,从通用处理程序中响应写入 JSON 也不难。

    【讨论】:

    • 是的,序列化字典在控制器上运行良好。现在,如何使用响应日历中的对象。我会将其标记为答案,希望能在最后一小部分获得更多帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2016-09-09
    • 2023-03-27
    • 2011-09-20
    相关资源
    最近更新 更多