2

私のアプリ:VS2010、MVC3、C#、最新のELMAH

ケース: エラーが発生し (null 参照など)、カスタム エラー ページが表示されます (customErrors mode="On")。

タスク: 管理者 (管理者ロールのユーザー) がカスタム エラー ページからエラーの詳細を表示できるようにする

質問: elmah エラー ID を取得してカスタム エラー ページ ビューに渡す方法を教えてください。

Upd : 関連する回答済みの質問: 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

これは、Global.asax.cs で処理できる Elmah ErrorLog モジュールのイベントです。

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>
}
于 2012-07-26T23:16:56.427 に答える
0

私が知っていることから、すべてのElmahエラーはEMAH_Errorというテーブルに保存されます。

したがって、実行できることの1つは、エラーが発生した現在の日時を取得し、その時間に保存されたレコードをテーブルに照会して、1分を与えることです。クエリは、ErrorIdも含む適切なタイムスタンプで保存されたエラーを返します。

EFなどを使用して、ElmahErrorを簡単に作成およびエンティティ化できます。

于 2012-07-26T22:58:38.690 に答える