Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在OnInit事件中设置cookie并在同一页上读取它们?_C#_Asp.net_Cookies_Webforms - Fatal编程技术网

C# 是否可以在OnInit事件中设置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

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

site master有一个包含多个类别的菜单,但它们都包含类似的内容。我需要菜单来记住选择了哪一个。因此,我尝试设置一个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”等

  • 我的问题是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">