我正在开发一个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”消息?
答案 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");