我的应用: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>
答案 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。