2

我的应用程序:VS2010、MVC3、C#、最新的 ELMAH

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

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

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

更新:相关已回答问题:ELMAH - 使用自定义错误页面收集用户反馈

自定义错误页面示例:

@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>
4

2 回答 2

2

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

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

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

@if (User.IsInRole(renweb.Constants.ROLE_ADMIN))
{
      <a href="@Url.Action("Detail","Elmah",new{id=@Session["ElmahId"]})">Error details</a>
}
于 2012-07-26T23:16:56.427 回答
0

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

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

您可以轻松地使用 EF 或其他东西来创建和实体 ElmahError。

于 2012-07-26T22:58:38.690 回答