2017-08-08 96 views
0

我有从GetTaskDetails方法得到结果的操作方法。elmah在执行catch块后不会抛出错误页面

public ActionResult Details(int id) 
     {   
      Tasks task = this._projectService.GetTaskDetails(id); 

      return View(task); 
     } 

     public Tasks GetTaskDetails(int taskId) 
     { 
      SqlDataReader rdr = null; 
      Tasks task = null; 

      using (var conn = new SqlConnection(connectionString)) 
      { 
       SqlCommand comm = new SqlCommand("usp_TaskGetByTaskId", conn); 
       comm.CommandType = CommandType.StoredProcedure; 
       comm.Parameters.AddWithValue("@TaskId", taskId); 
       try 
       { 
        conn.Open(); 
        rdr = comm.ExecuteReader(); 

        if (rdr.HasRows) 
        { 
         if (rdr.Read()) 
         { 
          task = new Tasks() 
          { 
           UniqueId = Convert.ToInt16(rdr["UniqueId"]), 
           ProjectId = Convert.ToInt16(rdr["ProjectId"]), 
           Sequence = Convert.ToInt16(rdr["Sequence"]), 
           Description = rdr["Description"].ToString(), 
           StaffId = Convert.ToInt16(rdr["StaffId"]), 
           StatusId = Convert.ToInt16(rdr["StatusId"]), 
           HeldBy = rdr["HeldBy"].ToString(), 
           Progress = rdr["Progress"].ToString() 
          }; 
         } 
        } 
       }    
       finally 
       { 
        conn.Close(); 
       } 
      } 
      return task; 
     } 

如果没有catch块,elmah会在数据库中记录错误并重定向到我想要的错误页面。但代码没有捕获块。 但如果添加到GetTaskDetails方法的catch块如下

catch (Exception ex) 
{ 
    ErrorSignal.FromCurrentContext().Raise(ex);     
} 

错误已记录到数据库并控制返回到操作方法不引发错误页面。 有没有办法让catch块登录到数据库,然后抛出一个错误页面,而不是重定向到控制器?我不确定我在想什么是正确的方法,或者是否需要在控制器操作方法中再次处理异常。

回答

0

您可以登录到ELMAH后抛出异常,这将导致错误页面显示:

catch (Exception ex) 
{ 
    ErrorSignal.FromCurrentContext().Raise(ex);     
    throw; 
} 

我没有看到这样做的任何好处,因为该解决方案将工作完全一样时,不有catch块。也许你可以更多地解释你想在这里实现什么?我不是真的在你的问题上看到问题。

+0

尝试阻止没有抓到似乎不令人信服的我。这是否是一种最佳做法?你可以请教 – ChinnaR

+0

ELMAH的整个想法是记录未捕获的异常。如果你想在你的代码中处理一个已知的错误,你应该使用try-catch来处理并重定向到错误页面或类似的catch。如果处理一个已知的错误,我不会建议登录到ELMAH,因为这应该是一个真正需要修复的错误列表。 – ThomasArdal

相关问题