2012-01-25 14 views
5

मैं एक पूर्ण वेब अनुप्रयोग विकसित कर रहा हूँ और मैं ASP.NET MVC 3 ढांचे का उपयोग कर रहा में पैरामीटर के रूप वस्तु। मैं ActionFilterAttribute के उप-वर्ग को कार्यान्वित कर रहा हूं।RedirectResult + एक यूआरएल

मैं OnActionExecuting विधि अधिभावी कर रहा हूँ। यदि OnActionExecuting विधि में कोई अपवाद पकड़ा गया है, तो मैं क्लाइंट ब्राउज़र को रीडायरेक्ट करना चाहता हूं। पुनर्निर्देशन यूआरएल मेरे नियंत्रकों में से एक में एक एक्शन विधि को लक्षित करता है। मैं रीडायरेक्शन यूआरएल में Exception ऑब्जेक्ट से डेटा पास करना चाहता हूं।

क्या Exception ऑब्जेक्ट सहित URL बनाने का कोई तरीका है और फिर URL को RedirectResult कन्स्ट्रक्टर में पास करना है?

उत्तर

7

क्या अपवाद ऑब्जेक्ट सहित URL बनाने का कोई तरीका है और फिर URL को RedirectResult कन्स्ट्रक्टर में पास कर रहा है?

नहीं। उदाहरण के लिए आप की तरह केवल क्वेरी स्ट्रिंग पैरामीटर पारित कर सकते हैं:

var values = new RouteValueDictionary(new 
{ 
    action = "foo", 
    controller = "bar", 
    exceptiontext = "foo bar baz" 
}); 
filterContext.Result = new RedirectToRouteResult(values); 

और लक्ष्य कार्रवाई में आप अपवाद पाठ पैरामीटर लाने के लिए सक्षम हो जाएगा:

public Action Foo(string exceptionText) 
{ 
    ... 
} 
+0

वहाँ एक रास्ता एक क्वेरी स्ट्रिंग में एक अपवाद वस्तु कन्वर्ट करने के लिए है? फिर, मैं रूट वर्ल्यू डिक्शनरी के कन्स्ट्रक्टर में क्वेरी स्ट्रिंग को एक कुंजी के मान के रूप में पास कर दूंगा। लक्ष्य क्रिया विधि एक अपवाद वस्तु को इनपुट पैरामीटर के रूप में ले जाएगी। – user1139666

+0

@ user1139666, नहीं, आपको केवल वे गुण शामिल करना चाहिए जिन्हें आप क्वेरी स्ट्रिंग पैरामीटर के रूप में रुचि रखते हैं। –

2

एक बेहतर समाधान [हैंडलरर] विशेषता का उपयोग करना होगा। यह त्रुटि तब होती है जब कोई त्रुटि होती है, उपयोगकर्ता को त्रुटि दृश्य के साथ प्रस्तुत किया जाएगा। जिस तरह से यह काम करता है, जब कोई त्रुटि आती है, यदि [हैंडलरर] विशेषता मौजूद है, तो एएसपी.नेट एमवीसी एक त्रुटि दृश्य की खोज करेगा, पहले नियंत्रक के दृश्य फ़ोल्डर में, फिर साझा दृश्य फ़ोल्डर में।

उदाहरण के लिए:

[HandleError] 
public class FooController : Controller { 
    ... 
} 

FooController के लिए किसी भी कार्रवाई में एक त्रुटि होता है, ASP.NET MVC पहले में खोज करेंगे ~/दृश्य/एक त्रुटि दृश्य के लिए फू (एक दृश्य के लिए Error.aspx नामित एएसपी.नेट व्यू इंजन, या रेज़र व्यू इंजन के लिए Error.cshtml)। यदि वह दृश्य नहीं मिला है, तो यह ~/Views/Shared में खोजेगा।

आपके विचार में आप एक सामान्य त्रुटि है, साथ ही प्रदर्शन के रूप में किसी भी अपवाद जानकारी प्रदर्शित कर सकते हैं।

[HandleError] विशेषता के एक अधिक विस्तृत विवरण के लिए http://blogs.msdn.com/b/gduthie/archive/2011/03/17/get-to-know-action-filters-in-asp-net-mvc-3-using-handleerror.aspx देखें।

3

आप इस तरह की स्थितियों के लिए TempData का उपयोग कर सकते हैं।

बस TempData["MyException"] = myException सेट इससे पहले कि आप अनुप्रेषित और फिर कार्रवाई आप यहां रीडायरेक्ट में है कि TempData मूल्य के लिए जाँच करें।

संबंधित मुद्दे