2009-03-16 60 views
7

私はASP.NET Webアプリケーションを使用していますが、例外がスローされたときにエラーメッセージボックスを表示する方法を知りたかったのです。例えばWebアプリケーションでエラーメッセージボックスを表示する方法asp.net c#

 try 
     { 
      do something 
     } 
     catch 
     { 
      messagebox.write("error"); 
      //[This isn't the correct syntax, just what I want to achieve] 
     } 

[メッセージボックスがエラーを示し]

はあなたが合理的にどちらかのクライアントのコンピュータまたはサーバー上でメッセージボックスを表示することはできません

答えて

12

ありがとうございます。クライアントのコンピュータでは、適切なエラーメッセージを含むエラーページにリダイレクトする必要があります。必要に応じて、例外メッセージとスタックトレースが含まれている可能性があります。サーバー上では、イベント・ログまたはログ・ファイルのいずれかに対して、いくつかのロギングを実行する必要があります。

try 
{ 
    .... 
} 
catch (Exception ex) 
{ 
    this.Session["exceptionMessage"] = ex.Message; 
    Response.Redirect("ErrorDisplay.aspx"); 
    log.Write(ex.Message + ex.StackTrace); 
} 

上記の「log」は、おそらくlog4netやその他のログユーティリティを使用して実装する必要があることに注意してください。

+0

@ tvanfosson - サーバー側またはクライアント側にメッセージボックスを表示できないわけではありません。彼らはそうすることを避けるべきです。 :) – Ramesh

+0

@Ramesh - 明らかにされました。 – tvanfosson

12

あなたはクライアントから切断されているため、単にmessagebox.writeを呼び出すことはできません。あなたは、メッセージボックスを表示するJavaScriptコードを登録する必要があります。

this.RegisterClientScriptBlock(typeof(string), "key", string.Format("alert('{0}');", ex.Message), true); 
+0

例外が要求されたページのレンダリングに問題を引き起こす場合は、別のエラーページを優先します。 – tvanfosson

+0

アラートや別のページが正しい解決策であるかどうかは、状況によって異なります。 –

2

私は過去にこれをやった方法は、例外がスローされたときの情報をページ上で何かを移入することです。 MessageBoxはWindowsフォーム用であり、Webフォームには使用できません。私はあなたが警告を行うためにページ上のいくつかのJavaScriptを置くことができたとします

Response.Write("<script>alert('Exception: ')</script>"); 
1

私はあなたが、例外の詳細を表示したいと思っていないでしょう。クライアントの1人が例外的な詳細で利用可能なすべてのものをユーザーに見せたくないため、私たちはこれをやめなければなりませんでした。問題があることを説明する情報を含むjavascriptウィンドウを表示してみてください。

4

MessageBox.Show()を使用すると、サーバーにメッセージボックスが表示され、ボックスが閉じない限り、スレッドはそれ以上の要求を処理しなくなります。これは、クライアント側の例外を示すだろう

this.Page.ClientScript.RegisterStartupScript(this.GetType(),"ex","alert('" + ex.Message + "');", true); 

で何ができる

は、例外がバブリングされていない提供しました。

1

すべてのエラーを1か所で処理したい場合は、Webアプリケーションのglobal.asaxファイル(グローバルアプリケーションファイルとも呼ばれます)を使用して、アプリケーションエラーイベントを処理できます。

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)); 
} 

これはにあなたの例外の技術的な詳細をログに記録します。これは、あなたがこのように、あなたには、いくつかのエラー処理コードを置くのApplication_Errorイベントで、その後、プロジェクトにグローバルアプリケーションファイルを追加Firtsようにそれは行きますシステムイベントログ(エラーを後で確認する必要がある場合) ErrorPage.aspxでは、Page_Loadイベントのクエリー文字列から例外メッセージをキャプチャします。それを表示する方法はあなた次第です(あなたは他の答えに示唆されたjavascript警告を使用するか、asp.netリテラルにテキストを単純に渡すことができます)

彼の助けを願っています。歓声

1

MVCとRazorで.NETコアを使用している場合、ページがレンダリングされる前にいくつかのレベルの前処理があります。それから私は、あなたが、あなたのビューページの上部にある条件付きエラーメッセージをラップしてみてくださいそのようにすることを示唆している:ViewController.csで

:View.cshtmlで

if (file.Length < 800000) 
{ 
    ViewData["errors"] = ""; 
} 
else 
{ 
    ViewData["errors"] = "File too big. (" + file.Length.ToString() + " bytes)"; 
} 

@if (ViewData["errors"].Equals("")) 
{ 
    @:<p>Everything is fine.</p> 
} 
else 
{ 
    @:<script>alert('@ViewData["errors"]');</script> 
} 
関連する問題