【问题标题】:jQuery setting value of a session会话的jQuery设置值
【发布时间】:2013-09-05 09:58:50
【问题描述】:

一旦触发下拉更改事件,我想更改 cookie 的值。

我在基本控制器上有一个 mvc 应用程序,其中包含以下代码:

public class CustomController : Controller
{
    HttpCookie mYcookie = new HttpCookie("trycookie");
    HttpCookie cookieCounter = new HttpCookie("cookieCounter");

    protected override void OnActionExecuted()
    {
        if (cookieCounter.Value == null)
        {
            mYcookie.Value = "tryvalue";

        // do something here //
        }
    }
}

它的作用是在应用程序运行后创建一个 cookie 实例。然后我有一个 jquery 来操作 cookie:

$.cookie("mYcookie", "tryvaluehere");
$.cookie("cookieCounter", "tryvaluehereagain");

每当我调试我的 c# 代码时,我的问题是,我的 cookie 的值是“”。但是每当我尝试在同一个 jquery 代码上提醒 cookie 时,我都会得到我想要的值

alert($.cookie("mYcookie"));

我的HttpCookie 实例是否会再次创建,即使我在我的方法之外声明它们?任何建议将不胜感激。提前致谢!

【问题讨论】:

    标签: c# jquery asp.net-mvc cookies


    【解决方案1】:

    我所做的是从请求中创建一个 cookie 实例。如果请求为空,则将该 cookie 创建为新 cookie。

    public class CustomController : Controller
    {
        HttpCookie mYcookie = this.Request.Cookies["trycookie"];
        HttpCookie cookieCounter = this.Request.Cookies["trycookie"];
    
        protected override void OnActionExecuted()
        {
            if (cookieCounter == null)
            {
                mYcookie = new HttpCookie("somenamehere");
            }
            else
            {
            // do something here //
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      你应该从请求中读取 cookie:

      public class CustomController : Controller
      {
          protected override void OnActionExecuted()
          {
              HttpCookie myCookie = this.Request.Cookies["trycookie"];
              HttpCookie cookieCounter = this.Request.Cookies["cookieCounter"];
      
              if (cookieCounter != null)
              {
                  // do something here //
              }
          }
      }
      

      或者如果你想设置一个cookie然后创建一个新的cookie实例并将其添加到响应中:

      HttpCookie cookie = new HttpCookie("name", "some value");
      this.Response.Cookies.Add(cookie);
      

      【讨论】:

      • 我做了this.Request.Cookies,但它们是空的。我相信是因为这是第一次运行代码,因为用户没有在客户端触发事件。
      • 是的,这很正常。 this.Request.Cookies["trycookie"] 将有一个值,即请求中发送了一个 cookie。如果您在 javascript 中设置 cookie,那么在第一个请求中没有任何请求是完全正常的。
      • 我要如何让这个cookie 在第一次运行时可用?
      • 你不能。这没有任何意义。在您设置此 cookie 之前,浏览器不会发送任何 cookie。您可以在服务器上设置 cookie(通过将其添加到 Response.Cookies 集合中,如我的回答中所示)或在客户端上。该 cookie 将在对服务器的所有后续请求中可用。我建议您阅读更多关于 cookie 是什么以及它们如何工作的内容:en.wikipedia.org/wiki/HTTP_cookie
      • 是的,这就是我正在做的。在服务器上创建一个实例,然后等待客户端更改该 cookie 的值。只是用户触发事件后我无法得到cookies的响应。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多