如何重新加载安全主体用户信息或部分视图

时间:2015-08-19 23:25:59

标签: c# asp.net-mvc partial-views

我正在开发一个aspnet mvc应用程序,我有一个问题是重新加载一些数据,我不知道问题是在每个视图包含的安全主体信息中,还是在我的局部视图中没有重新加载时显示了其他一些观点。

我有一个在我的整个应用程序中使用的布局页面,在这个布局页面中我有这个部分视图代码片段:

@Html.Partial("_PartialActiveClient")

这个局部视图包含下一行:

@if (User.IsInRole("HasClients"))
{
    <p>An Active Client</p>
    <a href="@Url.Action("Activate", "Client")">Change active client</a>

}
else
{
    <p>You don't have any clients<p>
    <a href="@Url.Action("Create", "Client")">Create client</a>
}

因此,当用户第一次创建帐户时,此用户有0个客户端且不属于“HasClients”角色,并且显示“您没有任何客户端”消息,但是当此用户创建他的第一个客户端,默认情况下在我的控制器中将用户添加到“HasClients”角色。问题是即使我改变了观点,“你没有任何客户”仍然存在。为了显示其他消息,该用户必须注销然后再次登录。

所以我的问题是,我的用户如何在创建客户端后立即看到“An Active Client”消息?

2 个答案:

答案 0 :(得分:0)

角色缓存在cookie中,因此您可以通过删除cookie来强制它们进行刷新。您需要刷新用户角色。这是一种方式  您可以调用此Roles.DeleteCookie();,它将清除角色并在下一个请求中重新加载 这取自此问题页面Refresh ASP.NET Role Provider

答案 1 :(得分:0)

只是为了澄清我对Tchaps提供的答案的评论。这是我的解决方案中的代码(不是我的原始代码,但是我的意思),就像我在评论中写的那样,它不优雅,但我的工作,至少在我的情况下。

// Add to role, save changes
await _userManager.AddToRoleAsync(userInSession.Id, roleHaveClients.Name);
await _userManager.UpdateAsync(userInSession);
// Sign out / Sing in
_registerManager.AuthenticationManager.SignOut();
await __registerManager.SignInAsync(userInSession, false, false);
// Redirect to another action
return RedirectToAction("someAction","someController");
相关问题