首页 > 解决方案 > 当期望值不在视图包中时重定向到登录页面

问题描述

我有一个隐藏字段,它呈现在我的 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

保罗

标签: c#asp.net-mvc-5

解决方案


正如其他人所评论的那样,这并不是 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 和扩展方法来检查看起来很有希望的视图包


推荐阅读