Как отобразить окно сообщения об ошибке в веб-приложении asp.net c #

StackOverflow https://stackoverflow.com/questions/651592

Вопрос

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

Например,

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

Обратите внимание, что " log " Вы должны реализовать это, возможно, используя 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 предназначен для оконных форм и не может использоваться для веб-форм. Я полагаю, вы могли бы разместить на странице какой-нибудь javascript, чтобы сделать предупреждение:

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

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

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

Надеюсь, это поможет. Приветствия

Если вы используете .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>
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top