سؤال

ولدي تطبيق ويب 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 );
 }

لاحظ أن "سجل" فوق يجب أن تنفذ من قبلك، ربما باستخدام log4net أو بعض المرافق قطع الأشجار.

نصائح أخرى

وأنت لا يمكن أن مجرد دعوة messagebox.write تسبب لك يتم قطع اتصال من العميل. يجب عليك تسجيل شفرة جافا سكريبت التي تظهر MESSAGEBOX:

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 هو لأشكال النوافذ ولا يمكن أن تستخدم لنماذج الويب. أفترض كنت قد وضعت بعض جافا سكريبت على الصفحة للقيام تنبيه:

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

وأنا لا أعتقد أن كنت تريد أن تظهر تفاصيل الاستثناء. كان علينا أن يتوقف عن فعل هذا لأنه واحد من عملائنا لا يريدون مستخدميها رؤية كل ما هو متاح في التفاصيل استثناء. محاولة عرض نافذة جافا سكريبت مع بعض المعلومات الواردة فيه موضحا أن هناك مشكلة.

إذا كنت ترغب في التعامل مع كل خطأ الخاص بك في مكان واحد، يمكنك استخدام ملف 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. كيفية عرض الأمر متروك لك (يمكنك استخدام تنبيه جافا سكريبت اقترح على إجابات أخرى أو تمرير بسيطة النص إلى asp.net الحرفي

وأمله يساعد. هتافات

إذا كنت تستخدم الأساسية. NET مع MVC والشفرة، لديك عدة مستويات من تجهيزها قبل صفحتك المقدمة. ثم أقترح عليك أن محاولة التفاف رسالة خطأ الشرطية في الجزء العلوي من الصفحة وجهة نظركم، كما يلي:

في 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