我正在为我的公司创建一个内部站点,我的登录页面由图块组成,这些图块是必需图块和可选图块的组合。磁贴列表及其各自的顺序以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);
}