javascript - 如何使用 C# 从 Controller 动态设置 JavaScript 对象的根名称

标签 javascript c# controller

我最接近找到答案的地方是: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/

相关文章:

javascript - 将 3 层数组映射到对象集合

c# - 添加多个成员 - Redis Booksleeve 不支持分数值

c# - 如何绘制单个像素?

angular - 从 Angular 4 传递整数 id 以在 Controller 中发布操作

c# - 如何测试当前请求是否是 Controller 中的 ajax 请求?

ruby-on-rails - 在 RSpec 测试中模拟子 uri

javascript - 从 codeigniter 查询到 javascript 日志

javascript - 如何阻止客户端 Socket.io 循环套接字发射?

javascript - 针对另外两个对象数组过滤一个对象数组时出现意外结果

c# - cookie 过期后如何返回 401 状态而不是 302 重定向?