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块登录到数据库,然后抛出一个错误页面,而不是重定向到控制器?我不确定我在想什么是正确的方法,或者是否需要在控制器操作方法中再次处理异常。
尝试阻止没有抓到似乎不令人信服的我。这是否是一种最佳做法?你可以请教 – ChinnaR
ELMAH的整个想法是记录未捕获的异常。如果你想在你的代码中处理一个已知的错误,你应该使用try-catch来处理并重定向到错误页面或类似的catch。如果处理一个已知的错误,我不会建议登录到ELMAH,因为这应该是一个真正需要修复的错误列表。 – ThomasArdal