C# 是否可以在OnInit事件中设置cookie并在同一页上读取它们?
我正在为一个客户网站创建一个实时模型,我在设计工作中遇到了一些问题 site master有一个包含多个类别的菜单,但它们都包含类似的内容。我需要菜单来记住选择了哪一个。因此,我尝试设置一个cookie,以记住上次访问的类别,并为用户保留突出显示的类别。(我知道这可能不是正确的方法,但这是一个模型,我只想把它完成。蛮力是可以接受的) 这是我糟糕透顶的代码,内联在母版页上:C# 是否可以在OnInit事件中设置cookie并在同一页上读取它们?,c#,asp.net,cookies,webforms,C#,Asp.net,Cookies,Webforms,我正在为一个客户网站创建一个实时模型,我在设计工作中遇到了一些问题 site master有一个包含多个类别的菜单,但它们都包含类似的内容。我需要菜单来记住选择了哪一个。因此,我尝试设置一个cookie,以记住上次访问的类别,并为用户保留突出显示的类别。(我知道这可能不是正确的方法,但这是一个模型,我只想把它完成。蛮力是可以接受的) 这是我糟糕透顶的代码,内联在母版页上: protected override void OnInit(EventArgs e) { base.OnI
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”等
我的问题是cookie总是落后一页。如果我从category1转到category2,category1将保持高亮显示。如果我继续讨论类别3,现在将突出显示类别2
我不明白的是,当我设置断点时,cookies值被设置为正确的页面,但它被错误地读取。我可以不这样做吗
有人能告诉我哪里出了问题或者有什么方法可以解决这个问题吗?共享当前请求中的一些数据的一种方法(可能不是最好的方法)是使用httpRequest.Context.current.Items容器。然后,您可以在请求处理结束时从某个地方提取您想要的值(可能是PostRender?这甚至是一个事件吗?共享当前请求的一些数据的一种方法(可能不是最好的方法)是使用httpRequest.Context.current.Items容器。然后,您可以在请求处理结束时从某个地方提取您想要的cookie值(可能是PostRender?这是一个事件吗?)您添加/删除的所有cookie只有在下一次请求时才可用/删除。这是因为Cookie属于客户端浏览器,HttpContext.Current.Response.Cookie返回当前请求附带的Cookie。
考虑使用这个任务的session或HtpCutExt.Currn.Type。 < P>所有添加或删除的Cookie将在下一个请求中可用/删除。这是因为Cookie属于客户端浏览器,HttpContext.Current.Response.Cookie返回当前请求附带的Cookie。
考虑使用Session或HtpCutExt.Currut.Objor来执行此任务。 < p>您在(<代码> OnInit < /COD> >期间,将cookies添加到<代码>响应。Cookie 集合,但是您的<代码>被选中< /COD>属性检查<代码>请求。Cookie 。将cookie添加到响应中也不会自动将其添加到当前请求中(据我所知) 您是否尝试在
Request.Cookies
和Response.Cookies
中查找selectedCategory
cookie,以处理当前请求中设置cookie时的特殊情况?实际上,我不确定这是否有效,但可能值得一试?您(正确地)在OnInit
期间向响应中添加cookies。cookies
收集,但您的IsSelected
属性检查请求。cookies
。将cookie添加到响应中也不会自动将其添加到当前请求中(据我所知)
您是否尝试在
Request.Cookies
和Response.Cookies
中查找selectedCategory
cookie,以处理当前请求中设置cookie时的特殊情况?事实上,我不确定这是否可行,但也许值得一试?在我写这篇文章的7年里,Cookie处理的变化没有我想象的那么大:
自我写这篇文章以来的7年里,Cookie处理的变化没有我想象的那么大:
+1,它对我需要做的事情不起作用,但是谢谢你的建议。+1,它对我需要做的事情不起作用,但是谢谢你的建议。+1,我从来没有用饼干做过这样的事情。没有考虑到它不会在当前的请求中。我切换到使用会话。谢谢你的建议。+1,我从来没有用饼干做过这样的东西。没有考虑到它不会在当前的请求中。我切换到使用会话。谢谢你的建议。
<li class="menu<%=IsSelected("category1") %>"><a href="/Category1.aspx">