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 );
}
上記の「ログ」は、おそらく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で.NETCoreを使用している場合、ページがレンダリングされる前にいくつかのレベルの前処理があります。次に、次のように、ビューページの上部で条件付きエラーメッセージをラップしてみることをお勧めします。
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>
}