Как отобразить окно сообщения об ошибке в веб-приложении asp.net c # - PullRequest
8 голосов
/ 16 марта 2009

У меня есть веб-приложение ASP.NET, и я хотел знать, как отобразить окно сообщения об ошибке при возникновении исключения.

Например,

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

[В окне сообщения отображается ошибка]

Спасибо

Ответы [ 7 ]

13 голосов
/ 16 марта 2009

Вы не можете разумно отобразить окно сообщения ни на компьютере клиента, ни на сервере. На клиентском компьютере вы захотите перенаправить на страницу ошибки с соответствующим сообщением об ошибке, возможно, включая сообщение об исключении и трассировку стека, если хотите. На сервере вы, вероятно, захотите сделать какую-нибудь запись, либо в журнал событий, либо в файл журнала.

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

Обратите внимание, что приведенный выше «журнал» должен быть реализован вами, возможно, с использованием log4net или какой-либо другой утилиты ведения журнала.

12 голосов
/ 16 марта 2009

Вы не можете просто вызвать messagebox.write, потому что вы отключены от клиента. Вы должны зарегистрировать код JavaScript, который показывает окно сообщения:

this.RegisterClientScriptBlock(typeof(string), "key",  string.Format("alert('{0}');", ex.Message), true);
5 голосов
/ 16 марта 2009

с использованием MessageBox.Show () приведет к тому, что на сервере отобразится окно сообщения, и поток не сможет обрабатывать дальнейший запрос, если окно не закрыто.

Что вы можете сделать, это

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

это будет показывать исключение на стороне клиента, если исключение не всплывает.

2 голосов
/ 16 марта 2009

Способ, которым я делал это в прошлом, состоит в том, чтобы заполнить что-то на странице информацией, когда выдается исключение. MessageBox предназначен для оконных форм и не может использоваться для веб-форм. Я полагаю, вы могли бы разместить на странице какой-нибудь javascript, чтобы сделать предупреждение:

Response.Write("<script>alert('Exception: ')</script>");
1 голос
/ 24 марта 2017

Если вы используете .NET Core с MVC и Razor, у вас есть несколько уровней предварительной обработки перед отображением вашей страницы. Затем я предлагаю вам попробовать добавить условное сообщение об ошибке вверху страницы просмотра, например:

В 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>
}
1 голос
/ 26 июня 2011

Если вы хотите обработать все ваши ошибки в одном месте, вы можете использовать файл 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

Надеюсь, что он помогает. Приветствия

1 голос
/ 16 марта 2009

Не думаю, что вы захотите показать детали исключения. Нам пришлось прекратить делать это, потому что один из наших клиентов не хотел, чтобы их пользователи видели все, что было доступно в деталях исключения. Попробуйте отобразить окно JavaScript с некоторой информацией, объясняющей, что возникла проблема.

...