引发Model的NullReferenceException时的RedirectToAction

时间:2015-06-09 21:14:03

标签: asp.net-mvc exception-handling asp.net-mvc-5

我有以下控制器方法

public ActionResult Details()
{
    try
    {
        Pacient pacientdp = new Pacient();
        if (pacientdp.PacientPrenume == null)
        {
            return RedirectToAction("Index", "Home");
        }
        var id = WebSecurity.GetUserId(User.Identity.Name);
        MedicalDBContext pacientContext = new MedicalDBContext();
        Pacient pacient = pacientContext.Pacients.FirstOrDefault(x => x.PacientID == id);
        return View(pacient);
    }
    catch (Exception ex)
    {
        return View("Error", new HandleErrorInfo(ex, "Home", "Index"));
    }
}

导航到Details View时,如果我从控制器方法中注释if部分,则会引发NullReferenceException。这种情况有时会发生,但有时它并不存在。这是我想要的行为。 所以我添加了if部分,所以当模型属性(PacientPrenume)为null以重定向到action时,此方法每次都重定向到action,即使模型不为null。

使用上述方法,无论pacientdp模型如何都执行块(如果为null,则为

如何仅在模型???

时处理此异常

1 个答案:

答案 0 :(得分:0)

发现问题,因此上下文模型实际设置了我的模型的值,因此pacientdp.PacientPrenume属性始终为null。贝娄是工作方法

            public ActionResult Details()
                {
                try
                    {
                    MedicalDBContext pacientContext = new MedicalDBContext();
                    var id = WebSecurity.GetUserId(User.Identity.Name);
                    if (pacientContext.Pacients.FirstOrDefault(x => x.PacientID == id) == null)
                        {
                        return RedirectToAction("Index", "Home");
                        }               
                        Pacient pacient = pacientContext.Pacients.FirstOrDefault(x => x.PacientID == id);
                        return View(pacient);
                    }
                catch (Exception ex)
                    {
                    return View("Error", new HandleErrorInfo(ex, "Home", "Index"));
                    }

                }