Webアプリケーションasp.net C#でエラーメッセージボックスを表示する方法
-
19-08-2019 - |
質問
ASP.NET Webアプリケーションがあり、例外がスローされたときにエラーメッセージボックスを表示する方法を知りたい。
たとえば、
try
{
do something
}
catch
{
messagebox.write("error");
//[This isn't the correct syntax, just what I want to achieve]
}
[メッセージボックスにエラーが表示されます]
ありがとう
解決
クライアントのコンピューターまたはサーバーにメッセージボックスを合理的に表示することはできません。クライアントのコンピューターの場合、適切なエラーメッセージ(必要に応じて例外メッセージとスタックトレースなど)を含むエラーページにリダイレクトする必要があります。サーバーでは、おそらくイベントログまたはログファイルのいずれかに何らかのログを記録する必要があります。
try
{
....
}
catch (Exception ex)
{
this.Session["exceptionMessage"] = ex.Message;
Response.Redirect( "ErrorDisplay.aspx" );
log.Write( ex.Message + ex.StackTrace );
}
<!> quot; log <!> quot;おそらくlog4netまたはその他のロギングユーティリティを使用して、上記の実装を行う必要があります。
他のヒント
messagebox.writeを呼び出すだけでは、クライアントから切断されます。メッセージボックスを表示するjavascriptコードを登録する必要があります。
this.RegisterClientScriptBlock(typeof(string), "key", string.Format("alert('{0}');", ex.Message), true);
MessageBox.Show()を使用すると、メッセージボックスがサーバーに表示され、ボックスが閉じられていない限り、スレッドがそれ以上のリクエストを処理しないようになります。
できることは、
this.Page.ClientScript.RegisterStartupScript(this.GetType(),"ex","alert('" + ex.Message + "');", true);
例外がバブルされない限り、これはクライアント側で例外を表示します。
過去にこれを行った方法は、例外がスローされたときにページ上の何かに情報を入力することです。 MessageBoxはWindowsフォーム用であり、Webフォームには使用できません。アラートを実行するためにページにjavascriptを配置できると思います:
Response.Write("<script>alert('Exception: ')</script>");
例外の詳細を表示したいとは思わないでしょう。クライアントの1人が、例外の詳細で利用可能なすべてのものをユーザーに見せたくないため、これをやめなければなりませんでした。問題が発生したことを説明する情報を含むJavaScriptウィンドウを表示してみてください。
すべてのエラーを1か所で処理する場合は、Webアプリケーションのglobal.asaxファイル(グローバルアプリケーションファイルとも呼ばれます)を使用して、アプリケーションエラーイベントを処理できます。このように、最初にグローバルアプリケーションファイルをプロジェクトに追加し、Application_Errorイベントに次のようなエラー処理コードを追加します。
void Application_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error Caught in Application_Error event\n" +
"Error in: " + Request.Url.ToString() +
"\nError Message:" + objErr.Message.ToString() +
"\nStack Trace:" + objErr.StackTrace.ToString();
System.Diagnostics.EventLog.WriteEntry("Sample_WebApp", err, System.Diagnostics.EventLogEntryType.Error);
Server.ClearError();
Response.Redirect(string.Format("{0}?exceptionMessage={1}", System.Web.VirtualPathUtility.ToAbsolute("~/ErrorPage.aspx"), objErr.Message));
}
これにより、例外の技術的な詳細がシステムイベントログに記録されます(後でエラーを確認する必要がある場合) 次に、ErrorPage.aspxで、Page_Loadイベントのクエリ文字列から例外メッセージをキャプチャします。表示方法はあなた次第です(他の回答で提案されたJavaScriptアラートを使用するか、テキストをasp.netリテラルに単純に渡すことができます
ご協力をお願いします。乾杯
MVCとRazorで.NET Coreを使用している場合、ページがレンダリングされる前にいくつかのレベルの前処理があります。次に、次のように、ビューページの上部に条件付きエラーメッセージをラップすることをお勧めします。
ViewController.cs内:
if (file.Length < 800000)
{
ViewData["errors"] = "";
}
else
{
ViewData["errors"] = "File too big. (" + file.Length.ToString() + " bytes)";
}
View.cshtml内:
@if (ViewData["errors"].Equals(""))
{
@:<p>Everything is fine.</p>
}
else
{
@:<script>alert('@ViewData["errors"]');</script>
}