在MVC中加载视图之前设置cookie值?

时间:2014-06-02 15:23:05

标签: asp.net-mvc asp.net-mvc-4 cookies

我需要在调用视图之前设置cookie值。否则我必须刷新页面才能在视图中获取cookie值。这里的问题是cookie的值将进入控制器。

[HttpGet]
[Route("Abstract/{meetingCode}")]
[AllowAnonymous]
public ActionResult Index(string meetingCode)
{
 var meetingAbstract = new MeetingAbstract();
 meetingAbstract.Meeting = _abstractContext.GetMeetingWithMeetingCode(meetingCode);
 if (meetingAbstract.Meeting != null)
 {
   var cookie = new HttpCookie("_culture");
   cookie.Value = meetingAbstract.Meeting.language.language_locale_code;//"en-US"; 
   cookie.Expires = DateTime.Now.AddDays(365);
   cookie.Path = "/";
   this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
...

没有再刷新页面以设置cookie值的其他方式吗?

1 个答案:

答案 0 :(得分:0)

Cookie有一些奇特的行为,我的意思是你在Response流中创建它们,然后发送到客户端,但它们在请求流中不可用,直到它们从客户端发送。

我的意思是,除非从客户端发送,否则无法访问cookie。

无论如何,为什么需要刷新页面才能访问刚创建的cookie?是不是更容易使用相同的变量?

[HttpGet]
[Route("Abstract/{meetingCode}")]
[AllowAnonymous]
public ActionResult Index(string meetingCode)
{
 var meetingAbstract = new MeetingAbstract();
 meetingAbstract.Meeting = _abstractContext.GetMeetingWithMeetingCode(meetingCode);
 var cookie;
 if (meetingAbstract.Meeting != null)
 {
   cookie = new HttpCookie("_culture");
   cookie.Value = meetingAbstract.Meeting.language.language_locale_code;//"en-US"; 
   cookie.Expires = DateTime.Now.AddDays(365);
   cookie.Path = "/";
   this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
 } else {
    cookie = this.ControllerContext.HttpContext.Request.Cookies["_culture"];
 }
...