在我的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();
}
}
答案 0 :(得分:6)
ModelState
是控制器都继承自的Controller
基类的属性。所以你可以在那里使用它,但不能在控制器之外使用它。您可以将模型状态作为参数传递,或者在这种情况下更有意义的是将逻辑保留在控制器中:
if(ModelState.IsValid)
_e.SaveAlert(_e); // pass ErrorLog instance to SaveAlert function
另外需要注意的一点是,将_e
传递给SaveAlert
方法是没有意义的。相反,您可以使用方法内部的this
来引用它。