我在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)
{
}
}
答案 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);
}