System.Web.MVC.ModelState没有IsValid的定义

1 c# asp.net-mvc asp.net-mvc-5

在我的MVC 5应用程序中,我的DeleteConfirmedActionResult中有一个try-catch块,效果很好.因此,我不重复代码,我试图将下面代码块的指示部分放入控制器外部的函数中.我将该函数添加到自定义ErrorLog类中,但是当我这样做时,Intellisense指出"System.Web.MVC.ModelState没有IsValid的定义".

此链接指示错误来自尝试使用ModelState类而不是属性.但是,该文章没有说明应该做什么.

下面是我目前所遵循的代码.我的问题是我需要做些什么,以便我可以将该ErrorLog条目保存到我的数据库表中?

这是我控制器中的代码

catch (Exception e)
{
    var _e = new ErrorLog().FillAndSend(e, "Delete", "ChildActionNames");

    // The following is identical each time I use this catch(Exception e) block

    UnitOfWorkErrorLog uw = new UnitOfWorkErrorLog();
    if (ModelState.IsValid)
    {
        uw.ErrorLogRepository.Insert(_e);
        uw.Save();
        return View("ErrorManaged");
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的事: 在控制器中捕获块

catch (Exception e)
{
    var _e = new ErrorLog().FillAndSend(e, "Delete", "ChildActionNames");
    _e.SaveAlert(_e);  // pass ErrorLog instance to SaveAlert function
}
Run Code Online (Sandbox Code Playgroud)

功能现在在ErrorLog课堂上

public void SaveAlert(ErrorLog _e)
{
    // this ErrorLog is already filled when called from controller
    UnitOfWorkErrorLog uw = new UnitOfWorkErrorLog();
    if (ModelState.IsValid)
    {
        uw.ErrorLogRepository.Insert(_e);
        uw.Save();        
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*idG 6

ModelStateController控制器都继承自的基类的属性.所以你可以在那里使用它,但不能在控制器之外使用它.您可以将模型状态作为参数传递,或者在这种情况下更有意义的是将逻辑保留在控制器中:

if(ModelState.IsValid)
    _e.SaveAlert(_e);  // pass ErrorLog instance to SaveAlert function
Run Code Online (Sandbox Code Playgroud)

作为另外一点需要注意,传递_eSaveAlert方法是没有意义的.相反,您可以使用this方法内部引用它.