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)
ModelState是Controller控制器都继承自的基类的属性.所以你可以在那里使用它,但不能在控制器之外使用它.您可以将模型状态作为参数传递,或者在这种情况下更有意义的是将逻辑保留在控制器中:
if(ModelState.IsValid)
_e.SaveAlert(_e); // pass ErrorLog instance to SaveAlert function
Run Code Online (Sandbox Code Playgroud)
作为另外一点需要注意,传递_e给SaveAlert方法是没有意义的.相反,您可以使用this方法内部引用它.
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |