更新Cookie以删除元素C#

时间:2018-09-26 22:25:12

标签: c# jquery ajax asp.net-mvc cookies

我正在为我的公司创建一个内部站点,我的登录页面由图块组成,这些图块是必需图块和可选图块的组合。磁贴列表及其各自的顺序以JSON字符串的形式保存在cookie中。我建立的cookie很好,只要顺序更改没有问题,我都可以更新它。我的问题是,当我让他们单击可选图块上的删除按钮时。不会将其从Cookie中删除。

这是ajax请求的部分代码:

@Ajax.ActionLink(" ", "RemoveTile", "Home", new { id = "_EventsTile" }, new AjaxOptions { OnSuccess= "$(this).closest('.tilePartial').remove(); location.reload();" }, new { @class = "fas fa-clickable fa-window-close removeTile", @style = "color:red; font-size:1.5em; padding-top:1%" })

这是控制器中动作的代码:

private void UpdateCookie(object obj, string cookieName, int expiredays = 30)
        {

            HttpCookie cookie = new HttpCookie(cookieName);
            cookie.Value = JsonConvert.SerializeObject(obj);
            cookie.Expires = DateTime.Now.AddDays(expiredays);
            Response.SetCookie(cookie);
            Response.Cookies.Add(cookie);
        }

        public void RemoveTile(string id)
        {
            List<TileInfo> newCookie = new List<TileInfo>();
            var cookieInfo = JsonConvert.DeserializeObject<List<TileInfo>>(Request.Cookies["TilePreferences"].Value);

            var removed = cookieInfo.FirstOrDefault(f => f.PartialName == id);
            cookieInfo.Remove(removed);
            //newCookie = cookieInfo;
            UpdateCookie(cookieInfo, "TilePreferences", 90);

            Response.StatusCode = 200;

        }

以及默认值以及完成后的“应该”是什么:

之前:

[
    {"PartialName":"_BulletinBoardTile","TileOrder":0},
    {"PartialName":"_TimeCardTile","TileOrder":1},
    {"PartialName":"_FeedbackTile","TileOrder":2},
    {"PartialName":"_CouncilTile","TileOrder":3},
    {"PartialName":"_EventsTile","TileOrder":4}
]

之后(意图):

[
    {"PartialName":"_BulletinBoardTile","TileOrder":0},
    {"PartialName":"_TimeCardTile","TileOrder":1},
    {"PartialName":"_FeedbackTile","TileOrder":2},
    {"PartialName":"_CouncilTile","TileOrder":3}
}

感谢您的帮助。

以下用于更新文件中顺序的代码可以正常工作:

public void UpdateTileOrder(string jsonString)
        {
            List<string> TileList = JsonConvert.DeserializeObject<List<string>>(jsonString);
            var cookieInfo = new List<TileInfo>();
            var i = 0;

            foreach (var item in TileList)
            {
                if (!string.IsNullOrWhiteSpace(item))
                {
                    var tile = new TileInfo
                    {
                        PartialName = item,
                        TileOrder = i
                    };
                    cookieInfo.Add(tile);
                    i++;
                }
            }
            UpdateCookie(cookieInfo, "TilePreferences", 90);
        }

0 个答案:

没有答案