Итак, я работаю над демо-веб-панелью.Ранее я использовал Session для хранения настроек панели управления, но я хотел бы перевести ее на более постоянный способ сохранения настроек.
Мне кажется, что использование файлов cookie было бы моим лучшим выбором.Я не совсем уверен, что у меня есть время, чтобы все уладить и записать в / из базы данных должным образом.
При этом я могу быть не согласен с некоторыми предположениями о сходстве междуСессия и печенье.
В настоящее время у меня есть такой код:
public Dictionary<string, RadPageViewSetting> PageViewStates
{
get
{
Dictionary<string, RadPageViewSetting> _pageViewStates = (Dictionary<string, RadPageViewSetting>)Session["PageViewStates"];
if (object.Equals(_pageViewStates, null))
{
_pageViewStates = new Dictionary<string, RadPageViewSetting>();
Session["PageViewStates"] = _pageViewStates;
}
return _pageViewStates;
}
set
{
Session["PageViewStates"] = value;
}
}
, где RadPageViewSetting - это класс с некоторыми свойствами, которые я записываю.
Возможна ли эта функция спеченье?Если нет, то где мне искать, чтобы сохранить мои данные при закрытии браузера?
РЕДАКТИРОВАТЬ: я собираюсь использовать http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx, чтобы помочь мне сериализовать словарь, а затем приступить к сериализации моего собственного пользовательскогогиперссылки на данные (RadPageViewSetting).
РЕДАКТИРОВАТЬ: Вот мое непроверенное решение.Может ли кто-нибудь взглянуть на это очень быстро и дать мне знать, если он выглядит неправильно?
public SerializableDictionary<string, RadPageViewSetting> PageViewStates
{
get
{
SerializableDictionary<string, RadPageViewSetting> _pageViewStates = new SerializableDictionary<string,RadPageViewSetting>();
HttpCookie cookie = HttpContext.Current.Response.Cookies["PageViewStates"]; //If the named cookie does not exist, this method creates a new cookie with that name.
if (object.Equals(cookie, null))
{
cookie = new HttpCookie("PageViewStates");
cookie.Expires = DateTime.Now.AddYears(100);
cookie.Value = null;
HttpContext.Current.Response.Cookies.Add(cookie);
}
else if( cookie.Value != null )
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(cookie.Value);
XmlSerializer serializer = new XmlSerializer(_pageViewStates.GetType());
_pageViewStates = serializer.Deserialize(stream) as SerializableDictionary<string, RadPageViewSetting>;
HttpContext.Current.Response.Cookies.Set(cookie);
}
return _pageViewStates;
}
set
{
XmlSerializer serializer = new XmlSerializer(value.GetType());
MemoryStream stream = new MemoryStream();
serializer.Serialize(stream, value);
StreamReader reader = new StreamReader(stream);
HttpContext.Current.Response.Cookies["PageViewStates"].Value = reader.ReadToEnd();
}
}