如何在视图asp.net mvc中访问会话

时间:2011-04-15 02:18:57

标签: asp.net-mvc asp.net-mvc-3 session spark-view-engine

我使用MVC 3和spark视图引擎。我有一个应该在每个页面访问的数据,基于数据的用户登录信息。所以我在用户进入时收集数据并将其放在会话中。我使用控件来处理站点主站(主页面)中的数据。并且会话中的数据将绑定到该控件(例如,Dropdownlist)。

在asp.net MVC上处理母版页中的数据是最佳做法吗? 我尝试为控制器创建一个基类,buat我无法保存登录凭据(HttpContext.User.Identity)。 如何从View中访问会话数据?

我尝试在火花视图引擎中使用@Session [“mydata”](!{Session [“mydata”]但是它不起作用:(

有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

有两种常用方法可以解决这个问题。 一种是在布局(母版页)中使用Html.RenderAction。通过这种方式,您可以将所有数据提前打包到母版页将使用的模型中。

第二种方法是让控制器继承自另一个控制器。实例化基本控制器时,它负责使用所需数据填充ViewData,然后显示在页面上。这要求所有控制器都从基本控制器继承。 见清单4/5: http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-cs

您也可以通过动作过滤器(以及其他方式)来做到这一点,但我认为以上两种方式更清晰

答案 1 :(得分:0)

您应该能够通过在控制器基类中调用System.Threading.Thread.CurrentPrincipal.Identity.Name来获取已登录用户的凭据。

这应该允许您填充ViewData,然后从您的视图中访问数据。

或者如果您仍想使用会话,您应该能够通过 - HttpContext.Current.Session [“mydata”]

访问会话

答案 2 :(得分:0)

您可以使用TempData [“name”]来共享控制器中不同操作的数据。记住,一旦检索到值,它将删除数据,但您可以使用.Peek和.Keep方法功能来存储其值