代码之家  ›  专栏  ›  技术社区  ›  Brandon

是否可以在OnInit事件中设置cookie并在同一页上读取它们?

  •  1
  • Brandon  · 技术社区  · 14 年前

    我正在为一个客户网站创建一个实时模型,我在让设计工作上遇到了一些问题。

    网站主控形状具有多个类别的菜单,但它们都包含类似的内容。我需要菜单来记住选择了哪一个。所以我尝试设置一个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">
    

    我的问题是饼干总是落后一页。如果我从Category1转到Category2,Category1将保持突出显示。如果我继续使用类别3,现在将突出显示类别2。

    我不明白的是,当我设置断点时,cookies值被设置为正确的页面,但它被读取错误。我可以不这样做吗?

    有人能告诉我是怎么回事还是怎么解决的?

    4 回复  |  直到 14 年前
        1
  •  2
  •   zihotki    14 年前

    只有在下一次请求时,您添加/删除的所有cookie才可用/删除。这是因为cookies属于客户端浏览器,而httpcontext.current.response.cookies返回当前请求附带的cookie。
    考虑为此任务使用session或httpcontext.current.items。

        2
  •  1
  •   No Refunds No Returns    14 年前

    在当前请求上共享某些数据的一种方法(可能不是最好的方法)是使用httpRequest.context.current.items容器。然后,您可以在请求处理结束时(可能是PostRender)从某个地方提取您想要的cookie大小值。这是一个事件吗?)

        3
  •  1
  •   pdr    14 年前

    自从我写下这篇文章以来,7年来,曲奇处理的变化没有我那么大:

    http://www.codeproject.com/KB/aspnet/aspnetcookies.aspx?df=100&forumid=13312&exp=0&fr=26

        4
  •  1
  •   Anders Fjeldstad    14 年前

    您正在(正确地)向 Response.Cookies 收集期间 OnInit 但你的 IsSelected 属性检查 Request.Cookies . 向响应中添加cookie不会自动将其添加到当前请求中(据我所知)。

    你试过寻找 selectedCategory 两种饼干 请求饼干 响应.cookies ,要在当前请求中设置cookie时处理特殊情况吗?我真的不确定这是否可行,但也许值得一试?