我有一个_Layout.cshtml页面,每次加载视图时都会呈现。我有一个存储当前用户的会话变量。在加载视图时,我需要检查该会话是否已经完成。如果会话输出我需要渲染另一个视图以提示用户再次登录。
我已经在_Layout.cshtml中编写了这段代码
@if( @Session["UserId"]!=null)
{/* Header,RenderBoady(),footer etc of layout goes here */}
else
{/*call another view here*/}
我不知道在 else 部分需要写什么。
答案 0 :(得分:2)
最有可能的是,您需要重定向用户而不是改变布局。我建议使用过滤器来完成这项任务,并考虑2个解决方案。
首先,利用内置的[Authorize]属性来减少自定义逻辑的数量 其次,使用自定义AuthorizeFilter,它可能如下所示:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
Controller controller = filterContext.Controller as Controller;
if (IsSessionExpired(filterContext))
{
filterContext.Result = new RedirectResult(<where to redirect>);
}
}
private bool IsSessionExpired(AuthorizationContext filterContext)
{
<logic>
}
}
选择您喜欢的任何内容并注册为全局过滤器或标记特定的控制器/操作。
答案 1 :(得分:1)
使用_ViewStart.cshtml并在该文件中执行此检查。根据状态设置登录用户和已注销用户的布局页面
@{
if( @Session["UserId"]!=null)
{
Layout = "~/Views/Shared/_Layout.cshtml";
}
else
{
Layout = "~/Views/Shared/_LayoutPartial.cshtml";
}
}