在ASP.NET MVC3中共享应用程序范围内的对象

时间:2011-05-05 14:25:27

标签: c# asp.net-mvc-3 application-variables

我有一个带有C#和Razor的ASP.NET MVC3 Web应用程序。

通过视图中的表单,我将Context.User.Identity.Name提交到控制器A 中的操作方法。

我想在应用程序范围内(在多个控制器之间)提供此变量。 现在,我只能将其分配到控制器A 中的全局变量 _UserName ,但当然它在控制器B 中不可用。

有可能吗?

由于

弗朗西斯

3 个答案:

答案 0 :(得分:1)

如果您在任何控制器中访问它,您应该在控制器方法中使用HttpContext.User.Identity - 它将在那里可用。无需存储在会话中。

答案 1 :(得分:1)

创建一个父控制器,所有控制器都从该控制器继承并在那里设置变量。你可以从那里做很多事情 - 将它包装在视图模型中,将一些用户细节放入ViewBag等等。

public class UserController : Controller
{
    // create your own User class with as many properties as you need
    protected User user { get; set; }

    public UserController()
    {
        user = // get user from db, wherever
    }
}

然后,只从UserController继承

public class ControllerA : UserController
{
    public ActionResult DoSomething()
    {
        user.Property = 123;
    }
}

答案 2 :(得分:0)

您应该查看缓存,并可能使用用户会话存储此信息。

查看this问题。