2009-02-03 12 views
13

से वापसी देखें मेरे पास एक एक्शनफ़िल्टर है जो जांचता है कि यूआरएल में पैरामीटर वैध है या नहीं। यदि यह मान्य नहीं है तो मुझे एक दृश्य प्रस्तुत करना होगा। मैं रीडायरेक्ट नहीं करना चाहता, क्योंकि मुझे अभी भी ActionExecutingContext की आवश्यकता है। क्या यह किया जा सकता है?एक्शनफिल्टर

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     Guid processIdentifier = (Guid)filterContext.RouteData.Values["processIdentifier"]; 
     //if processIdentifier not found render a view with message and some other objects in ViewData 
     filterContext.Controller.ViewData.ModelState.AddModelError("WrongProcessIdentifier", "The process-id you supplied is not valid"); 
     base.OnActionExecuting(filterContext); 
    } 

उत्तर

31

HandleErrorAttribute जो मैं ढूंढ रहा था वह था।

filterContext.Result = new ViewResult 
      { 
       ViewName = "MessagePage", 
       ViewData = filterContext.Controller.ViewData, 
       TempData = filterContext.Controller.TempData 
      }; 
+0

मुझे लगता है कि आपको अपना उत्तर स्वीकार करना चाहिए क्योंकि इसमें कोड –

+1

शामिल है जो भी इसके लायक है, मैंने जानबूझकर कोड शामिल नहीं किया है, क्योंकि कोड का यह क्षेत्र अभी एमवीसी ढांचे के हर रिलीज के साथ बदल रहा है। मुझे लगता है कि सही जवाब है "जो कुछ भी ढांचा वर्तमान में कर रहा है।" –

1

हां। HandleErrorAttribute के स्रोत को देखें।

0

इस

[HandleError] 
public ActionResult MyAction (int id) 
{ 
    // ... 
} 

प्रयास करें और दृश्य आपको ~/Views/Shared/Error.ascx करने के लिए प्रदान की गई चाहते डाल दिया।

+0

फ़िल्टर [हैंडलरर] जैसे फ़िल्टर केवल क्रिया विधियों पर लागू होते हैं। OnActionExecuting() विधि स्वयं एक क्रिया विधि के बजाय एक फ़िल्टर है, इसलिए इस तरह के गुणों का कोई प्रभाव नहीं पड़ता है। – Levi

+0

क्षमा करें मैंने विधि को भी नहीं देखा। मैंने अपडेट कर दिया है। –

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