C# 在MVC范例中,我应该在哪里保存用户数据,以便它';它在所有级别都可以访问吗?
背景: 我是MVC的新手,正在学习如何做事 我想做什么: 我正在尝试使用户数据可用于所有操作 我是如何实现的: 我通过在OnActionExecuting函数中加载用户数据来实现这一点 我遇到的问题: 我不知道在哪里存储我的用户数据以及以后如何检索它(即,在操作期间) 当前代码: 这里我正在加载当前用户C# 在MVC范例中,我应该在哪里保存用户数据,以便它';它在所有级别都可以访问吗?,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,背景: 我是MVC的新手,正在学习如何做事 我想做什么: 我正在尝试使用户数据可用于所有操作 我是如何实现的: 我通过在OnActionExecuting函数中加载用户数据来实现这一点 我遇到的问题: 我不知道在哪里存储我的用户数据以及以后如何检索它(即,在操作期间) 当前代码: 这里我正在加载当前用户 protected override void OnActionExecuting(ActionExecutingContext ctx) { base.OnAction
protected override void OnActionExecuting(ActionExecutingContext ctx) {
base.OnActionExecuting(ctx);
UserAccount user = null;
using (UsersContext db = new UsersContext()) {
user = db.UserProfiles.FirstOrDefault(u => u.userName.ToLower() == User.Identity.Name.ToLower());
}
}
在这些地方我怎么得到它
public ActionResult Default() {
ViewBag.Message = user.userName; // ????????????
return View();
}
可能的解决方案:
只要让你的控制器继承一些基本的控制器类就可以了
public class AccountController : BaseController
然后在BaseController中,您可以自由创建表示用户数据的方法或项目,这些方法或项目将在AccountController的所有操作中可用
public class BaseController : Controller
{
public User CurrentUser
{
get
{
if (HttpContext.User == null || HttpContext.User.Identity.AuthenticationType != "Forms")
return null;
if (Session["CurrentUser"] != null)
return (User)Session["CurrentUser"];
var identity = HttpContext.User.Identity;
var ticket = ((FormsIdentity)identity).Ticket;
int userId;
if (!int.TryParse(ticket.UserData, out userId)
return null;
using (var db= new DbEntities(connectionString))
{
Session["CurrentUser"] = db.Users.SingleOrDefault(u => u.ID == userId));
}
return (User)Session["CurrentUser"];
}
set { Session["CurrentUser"] = value; }
}
}
除此之外,您还可以在
BaseController
中拥有一个将值写入会话的属性。这样,您的用户信息将在整个会话中可用。我有两个问题:您从哪里获得DbEntities或当前上下文?你把它放在哪里?另外,如何获取connectionString?DbEntities仅用于示例,它是由设计器生成的EntityFramework类,用于访问数据库。您可能希望将EF作为一种可能的ORM(对象关系映射)工具来帮助您。将连接字符串放在web.config文件中,并使用System.Configuration.ConfigurationManager.AppSettings[“YouConnectionStringName”];去拿。看看