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

本文关键字:视图 信息 用户 何重新 加载 安全 主体 | 更新日期: 2023-09-27 18:08:53

我正在开发一个asp.net 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"角色。问题是,即使我改变观点,"你没有任何客户"仍然存在。为了显示其他消息,该用户必须注销,然后再次登录。

所以我的问题是,我的用户如何在创建客户端后立即看到"一个活跃的客户端"消息?

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

角色缓存在cookie中,因此您可以通过删除cookie来强制刷新它们。需要刷新用户角色。这里有一个方法您可以将其称为Roles.DeleteCookie();,它将清除角色并在下一个请求中重新加载它。
这是从这个问题页面刷新ASP。. NET角色提供程序

只是为了澄清我对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");