2009-03-16 8 views
7

मेरे पास एक एएसपी.नेट वेब एप्लिकेशन है, और मैं जानना चाहता था कि अपवाद फेंकने पर मैं एक त्रुटि संदेश बॉक्स कैसे प्रदर्शित कर सकता हूं।वेब अनुप्रयोग में त्रुटि संदेश बॉक्स को कैसे प्रदर्शित करें 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); 
} 

नोट "लॉग ऑन" से ऊपर होता है कि आप द्वारा लागू किया जाना है, शायद log4net या कुछ अन्य प्रवेश करने सुविधा का उपयोग।

+0

@ tvanfosson - ऐसा नहीं है कि वे सर्वर पक्ष या ग्राहक पक्ष पर संदेश बॉक्स प्रदर्शित नहीं कर सकते हैं। उन्हें बस ऐसा करने से बचना चाहिए। :) – Ramesh

+0

@ रमेश - स्पष्ट। – tvanfosson

12

आप केवल संदेशबॉक्स को कॉल नहीं कर सकते हैं। लिखने का कारण है कि आप क्लाइंट से डिस्कनेक्ट हैं। आप जावास्क्रिप्ट कोड है कि एक messagebox से पता चलता रजिस्टर करना चाहिए:

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

यदि अपवाद अनुरोधित पृष्ठ के प्रतिपादन में समस्याएं पैदा करेगा तो मैं एक अलग त्रुटि पृष्ठ पसंद करूंगा। – tvanfosson

+0

मुझे लगता है कि यह संदर्भ पर निर्भर करता है अगर कोई अलर्ट या एक अलग पृष्ठ सही समाधान है। –

2

तरह से मैं अतीत में इस किया है जब एक अपवाद फेंक दिया जाता है जानकारी के साथ पृष्ठ पर कुछ को भरने के लिए है। संदेशबॉक्स विंडोज रूपों के लिए है और वेब रूपों के लिए उपयोग नहीं किया जा सकता है। मैं तुम्हें एक चेतावनी करने के लिए पृष्ठ पर कुछ जावास्क्रिप्ट डाल सकता है लगता है:

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

मुझे नहीं लगता है कि आप अपवाद के विवरण को दिखाने के लिए चाहते हैं। हमें ऐसा करना बंद करना पड़ा क्योंकि हमारे ग्राहकों में से कोई नहीं चाहता था कि उनके उपयोगकर्ता अपवाद विवरण में उपलब्ध सब कुछ देख रहे हों। इसमें कुछ जानकारी के साथ एक जावास्क्रिप्ट विंडो प्रदर्शित करने का प्रयास करें जिसमें यह समझाया गया है कि कोई समस्या हुई है।

4

संदेशबॉक्स का उपयोग कर। शो() सर्वर में एक संदेश बॉक्स दिखाने के लिए कारण होगा और थ्रेड बंद होने तक थ्रेड को और अनुरोध संसाधित करने से रोक देगा।

आप क्या कर सकते है,

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

इस ग्राहक के पक्ष में अपवाद दिखाई देंगे, बशर्ते अपवाद bubbled नहीं है।

1

यदि आप अपनी सभी त्रुटि को एक ही स्थान पर संभालना चाहते हैं, तो आप अपने वेबप्लिकेशंस के global.asax फ़ाइल (जिसे वैश्विक एप्लिकेशन फ़ाइल के रूप में भी जाना जाता है) का उपयोग कर सकते हैं और एप्लिकेशन त्रुटि ईवेंट के साथ काम कर सकते हैं। यह हो जाता है यह आप Application_Error घटना पर अपनी परियोजना के लिए वैश्विक आवेदन फाइल जोड़ने, तो आप कुछ त्रुटि हैंडलिंग कोड डाल दिया, इस तरह firts की तरह:

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 पर आप पेज_लोड ईवेंट पर क्वेरीस्ट्रिंग से अपवाद संदेश कैप्चर करते हैं। इसे प्रदर्शित करने के लिए आप पर निर्भर है (आप अन्य उत्तरों पर सुझाए गए जावास्क्रिप्ट अलर्ट का उपयोग कर सकते हैं या सरल को एएसपीनेट शाब्दिक

पर पाठ को पास कर सकते हैं।चीयर्स

1

यदि आप एमवीसी और रेजर के साथ .NET कोर का उपयोग कर रहे हैं, तो आपके पृष्ठ को प्रस्तुत करने से पहले आपके पास प्रीप्रोकैसिंग के कई स्तर हैं। तब मैं सुझाव है कि आप अपने दृश्य को पेज के शीर्ष पर एक सशर्त त्रुटि संदेश लपेटकर कोशिश है, तो जैसे:

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> 
} 
संबंधित मुद्दे