2013-04-17 91 views
1

如果我想访问控制器操作中的Request对象,我需要编写HttpContext.Request,而如果我想在MVC视图中访问同一个对象,则需要编写HttpContext.Current.Request。 他们之间有什么区别吗? 我面临的问题是,我通过控制器动作中的HttpContext.Response.Cookies.Add设置的cookie在MVC视图中的HttpContext.Current.Request.Cookies集合中没有找到,尽管我可以通过javascript查看这些cookie。HttpContext.Current.Request和HttpContext.Request是否有区别?

回答

2

你必须在视图上写控制器HttpContext.RequestHttpContext.Current.Request的原因是因为你写一个控制器继承抽象类Controller,有一个叫HttpContext属性,是HttpContextBase类型。该视图然后使用密封类HttpContext,它为您提供当前请求的httpcontext对象。

它们之间有什么区别吗?

不可以。因为两者都会为当前请求提供相同的HttpRequest对象。

+0

好的,我面临的问题是,我在Controller操作中设置了一个cookie,并且想在MVC视图中读取它,但它没有显示任何值。但是,如果我尝试从相同视图的JavaScript中读取它,它显示了值。什么可能是解决方案? – Nirman

+0

所以,如果你这样做:'Response.Cookies.Add(新的HttpCookie( “cookie_monster”, “六眼”));'在你的控制器,并做了'

@ HttpContext.Current.Request.Cookies [ “cookie_monster”] 。价值

'没有什么是显示?你甚至用这种方式?没有意义。 –

0

除非我记错了,你写一个cookie出来回应,但直到下一个请求是由该Cookie是不可用的请求(即,你必须重新加载相同或一个新的页面来获得它读取cookie)。 Cookie不是在控制器和视图之间共享信息的好方法,您应该使用ViewData或ViewBag。

而且,你必须确保你,你已经输出任何东西,这是一个原因,Response.Write不建议后,不会写的cookie。

原因的JavaScript的工作原理是,它在客户端,而不是在服务器上读取cookie。

相关问题