MVC3 + ELMAH导航到错误细节?

时间:2012-07-26 14:08:48

标签: asp.net-mvc logging razor elmah custom-error-pages

我的应用:VS2010,MVC3,C#,最新ELMAH

案例:发生了一些错误(例如空引用),显示了自定义错误页面(customErrors mode =“On”)。

任务:允许管理员(角色管理员中的用户)查看自定义错误页面中的错误详细信息

问题:如何获取/将elmah错误ID传递给自定义错误页面视图?

更新:相关回答的问题:ELMAH - Using custom error pages to collecting user feedback

自定义错误页面示例:

@model System.Web.Mvc.HandleErrorInfo
@{
  ViewBag.Title = "Error";
}
<h2>
  Error processing a request.
  @if (User.IsInRole(MyAppNamespace.Constants.ROLE_ADMIN))
  {
    // where to obtain ELMAH error id to navigate to error details ?
    // elmah/detail?id=291f5e83-5756-43bf-a889-07a548727da7
    <a href="@Url.Content("~/elmah")">View error details</a>
  }
</h2>

2 个答案:

答案 0 :(得分:2)

这是Elmah ErrorLog模块中的一个事件,可以在Global.asax.cs中处理:

protected void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args)
{
    Session["ElmahId"] = args.Entry.Id;
}

然后我们可以使用存储的id导航到错误(我正在使用实现特殊控制器而不是默认elmah页面的Elmah.Mvc模块)。在Error.cshtml中:

@if (User.IsInRole(renweb.Constants.ROLE_ADMIN))
{
      <a href="@Url.Action("Detail","Elmah",new{id=@Session["ElmahId"]})">Error details</a>
}

答案 1 :(得分:0)

据我所知,所有Elmah错误都保存在名为EMAH_Error的表中。

因此,您可以做的一件事是获取错误发生时的当前日期时间,并查询表中保存的时间给出/需要1分钟。该查询将返回使用相应时间戳保存的错误,该时间戳也将包含ErrorId。

您可以轻松使用EF或其他内容来创建和实体ElmahError。