/// <summary> /// Чтение значения контрола из cookies /// </summary> /// <param name="userControl">Контрол</param> /// <param name="key">Ключ (если контролу необходимо хранить несколько значений)</param> public string GetValue(UserControl userControl, string key) { if (userControl == null) { return(string.Empty); } lock (locker) { string pageName = userControl.Request.Url.AbsolutePath.Replace("/", "_"); string keyName = $"{userControl.ClientID.ToMd5()}_{key}"; HttpCookie cookie = userControl.Request.Cookies[pageName]; CookiedControlsGroup groupValue = (string.IsNullOrEmpty(cookie?.Value)) ? new CookiedControlsGroup() : JsonConvert.DeserializeObject <CookiedControlsGroup>( CompressionHelper.Unzip(System.Convert.FromBase64String(cookie?.Value))); if (groupValue.KeyValues.ContainsKey(keyName)) { return(groupValue.KeyValues.FirstOrDefault(i => i.Key == keyName).Value); } } return(string.Empty); }
/// <summary> /// Сохранение значения контрола в cookies /// </summary> /// <param name="userControl">Контрол</param> /// <param name="key">Ключ (если контролу необходимо хранить несколько значений)</param> /// <param name="value">Значение, которое необходимо сохранить</param> public void SaveValue(UserControl userControl, string key, string value) { if (userControl == null) { return; } lock (locker) { string pageName = userControl.Request.Url.AbsolutePath.Replace("/", "_"); string keyName = $"{userControl.ClientID.ToMd5()}_{key}"; string cookieContent = GetCachedItem(userControl); CookiedControlsGroup groupValue = (string.IsNullOrEmpty(cookieContent)) ? new CookiedControlsGroup() : JsonConvert.DeserializeObject <CookiedControlsGroup>(cookieContent); if (!string.IsNullOrEmpty(value)) { if (!groupValue.KeyValues.ContainsKey(keyName)) { groupValue.KeyValues.Add(keyName, value); } else { groupValue.KeyValues[keyName] = value; } } else { if (groupValue.KeyValues.ContainsKey(keyName)) { groupValue.KeyValues.Remove(keyName); } } HttpCookie cookie = new HttpCookie(pageName, System.Convert.ToBase64String(CompressionHelper.Zip(JsonConvert.SerializeObject(groupValue)))) { Expires = DateTime.Now.AddDays(30 * (groupValue.HasData ? 1 : -1)) }; HttpContext.Current.Items[pageName] = JsonConvert.SerializeObject(groupValue); if (userControl.Response.Cookies[pageName] == null) { userControl.Response.Cookies.Add(cookie); } else { userControl.Response.Cookies.Set(cookie); } } }