2017-08-08 3 views
0

GetTaskDetailsメソッドから結果を取得するアクションメソッドがあります。catchブロックを実装した後にelmahがエラーページをスローしない

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はデータベースにエラーを記録し、エラーページにリダイレクトします。しかし、コードはcatchブロックを持っていません。 しかしGetTaskDetails方法に加えcatchブロックが

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

以下のように存在する場合、エラーは、データベースと、エラーページを投げることなく、アクションメソッドに戻るに記録されています。 キャッチブロックをデータベースに記録してからコントローラにリダイレクトするのではなく、エラーページをスローする方法はありますか?私は正しいアプローチであると思っているか、コントローラーアクションメソッドで例外を再度処理する必要があるかどうかはわかりません。

答えて

0

あなたはエラーページが表示されますどの、ELMAHにログインした後に例外をスローすることができます

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

そのソリューションは正確にいないときのように動作しますので、私は、そうすることで任意の利点が表示されませんキャッチブロックを有する。あなたがここで達成しようとしていることについてもっと説明できるかもしれませんか?私は本当にあなたの質問に問題が表示されません。

+0

キャッチなしでブロックを試してみると、私には説得力がないようでした。それは本当にベストプラクティスですか?あなたはアドバイスをお願いできます – ChinnaR

+0

ELMAHのアイデア全体は、キャッチされない例外を記録することです。コードで既知のエラーを処理したい場合は、try-catchを使用してそれを処理し、catchのエラーページなどにリダイレクトする必要があります。既知のエラーを処理する場合は、実際に修正するエラーのリストである必要があるため、ELMAHにログすることはお勧めしません。 – ThomasArdal

関連する問題