Я создаю живой макет для клиентского веб-сайта, и у меня возникают некоторые проблемы с получением дизайна.
В мастере сайта есть меню с несколькими категориями, но все они содержат похожий контент. Мне нужно меню, чтобы вспомнить, какой из них был выбран. Поэтому я попытался установить файл cookie, который запомнил бы, к какой категории последний раз обращались, и оставил ее выделенной для пользователя. (Я знаю, что это, вероятно, неправильный способ сделать это, но это макет, и я просто хочу сделать это. Грубая сила приемлема).
Вот мой смущающе плохой код, встроенный в главную страницу:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
switch (Path.GetFileNameWithoutExtension(HttpContext.Current.Request.Url.AbsolutePath).ToLower())
{
case "category1":
HttpContext.Current.Response.Cookies.Add(new HttpCookie("selectedCategory", "category1"));
break;
case "category2":
HttpContext.Current.Response.Cookies.Add(new HttpCookie("selectedCategory", "category2"));
break;
...
case "default":
HttpContext.Current.Response.Cookies.Add(new HttpCookie("selectedCategory", "category1"));
break;
}
}
// filePath will be "category1", "category2", etc.
public string IsSelected(string filePath)
{
return String.Compare(HttpContext.Current.Request.Cookies["selectedCategory"].Value, filePath, true) == 0
? " selected" // The class name to add to the CSS
: String.Empty;
}
А по ссылкам просто позвоните IsSelected
с именем "category1", "category2" и т. Д.
<li class="menu<%=IsSelected("category1") %>"><a href="/Category1.aspx">
Моя проблема в том, что cookie всегда находится позади страницы. Если я перейду из категории 1 в категорию 2, категория 1 останется выделенной. Если я продолжу к категории 3, теперь категория 2 будет выделена.
Чего я не понимаю, так это того, что когда я устанавливаю точки останова, значение cookie задается на правильной странице, но читается неправильно. Могу ли я вообще этого не делать?
Может кто-нибудь сказать мне, что не так или способ исправить это?