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

时间:2015-07-23 15:57:31

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

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

This link表示错误来自于尝试使用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");
    }
}

这就是我想做的事情控制器中的Catch块

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

此功能现在位于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();        
    }
}

1 个答案:

答案 0 :(得分:6)

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

if(ModelState.IsValid)
    _e.SaveAlert(_e);  // pass ErrorLog instance to SaveAlert function

另外需要注意的一点是,将_e传递给SaveAlert方法是没有意义的。相反,您可以使用方法内部的this来引用它。