在MVC4中更新后刷新Session变量

时间:2014-07-20 15:21:40

标签: c# asp.net-mvc-4 session

我在global.asax文件中有代码:

if (user != null) HttpContext.Current.Session.Add("UserRole", user.Role.Trim());

有一个管理功能,可以更改角色。视图继续显示旧会话值,即会话开始时设置的值。如何刷新值?

编辑:也许我应该问这是否有更好的方法呢?我在视图中使用它来显示/隐藏菜单和div。

我在_layout.cshtml文件中有以下代码: $(document).ready(function () { if ('@(Session["UserRole"] == null)' == 'True') { //dp some stuff }

为清楚起见,这是控制器代码: [HttpPost] public ActionResult Edit(int userid, string firstname, string lastname, string domain, string email, string role, string branch) { try { User user = context.Users.Find(userid); user.FirstName = firstname; user.LastName = lastname; user.DomainName = domain; user.Email = email; user.Role = role; user.Branch = branch; context.SaveChanges(); return RedirectToAction("ManageUsers"); } catch (Exception ex) {
} }

2 个答案:

答案 0 :(得分:0)

C#是在页面加载时执行的服务器端代码,因此它将具有旧值,您必须通过ajax调用从服务器获取会话值:

$(document).ready(function () {


$.ajax({

url: '@Url.Action("GetSession","Home")',
success:function(response)
{

if (response === "") 
{ 
//dp some stuff 

}


}

});

}

并在行动中:

public ActionResult GetSession()
{
var SeesionValue = Session["UserRole"] !=null ? Session["UserRole"].ToString() : "";
return Content(SeesionValue );
}

答案 1 :(得分:0)

我明白了。我正在使用全局动作过滤器。过滤器已注册,然后应用于控制器中需要它的所有操作。 public class ShowUserdetailsActionFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); using (Entities context = new Entities()) { var userName = filterContext.HttpContext.User.Identity.Name; var u = context.Users.Where(x => x.DomainName == userName).FirstOrDefault();

    filterContext.Controller.TempData.Add("UserRole", user.Role);
 }

filterContext.Controller.TempData.Add("UserRole", user.Role); }