c# - 当期望值不在视图包中时重定向到登录页面
问题描述
我有一个隐藏字段,它呈现在我的 viewbag 中定义的整数 siteId
有时这不存在,我假设它可能与 MVC 中的会话有关
发生这种情况时,如何重定向到我的登录页面?目前,这在我的 cshtml 页面中出现了转换错误
如果错误发生在我的控制器中,这很容易,但我不知道如何处理 cshtml 文件中的错误
我的cshtml有这个
<div>
@(Html.Hidden("SiteID", (int) ViewBag.SiteID))
</div>
好像我的用户在网站上停留了一段时间然后尝试刷新或做我得到的其他事情cannot convert null to 'int' because it is a non nullable type
保罗
解决方案
正如其他人所评论的那样,这并不是 View 管理的真正责任。您应该可以在仍处于控制器级别代码中时访问所有变量,并且应该相应地处理它。
一种方法是使用过滤器。在该OnActionExecuted
方法中,您可以检查该值是否已填充,然后重定向到登录页面。也许是这样的:
public class SiteIdFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
bool shouldRedirect = SomeMethodToCheckViewBag();
if (shouldRedirect)
{
filterContext.Result = new new RedirectToRouteResult("SystemLogin", routeValues);
}
}
}
这个答案检查 ViewBag 是否有属性,有条件地注入 JavaScript has 和扩展方法来检查看起来很有希望的视图包
推荐阅读
- vba - VBA中合并单元格的问题
- java - 将单个数组列表项添加到单个磁贴
- php - 使用按钮通过表单将 $row['id'] 发送到另一个 PHP
- html - 将 CSS 规则链接到子工作表
- r - R中的脚本“网球共同对手”
- javascript - reactJs中如何调用另一个组件的函数
- php - Laravel 异步上传文件
- spring - authentication.getPrincipal() 始终是 String 而不是 UserDetails
- javascript - 在 JavaScript 中使用递归函数时如何处理 Promise
- spring-boot - 将 Spring Boot oAuth2 应用程序作为资源服务器运行并提供 Web 内容