2012-03-23 20 views

उत्तर

18

आप इसके लिए filterContext.Result का उपयोग कर सकते हैं। यह इस तरह दिखना चाहिए:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    //Check your condition here 
    if (true) 
    { 
     //Create your result 
     filterContext.Result = new EmptyResult(); 
    } 
    else 
     base.OnActionExecuting(filterContext); 
} 
+0

आप बेस को क्यों छोड़ते हैं। ऑक्शन निष्पादन जब आपकी हालत सच होती है? मेरे मामले में मुझे परिणाम सेट करने से पहले चलाने की जरूरत है। – xr280xr

33

मेरा डाउनलोड नमूना और एमएसडीएन आलेख Filtering in ASP.NET MVC देखें।

संपत्ति को गैर-शून्य मान पर सेट करके आप OnActionExecuting और OnResultExecuting विधियों में फ़िल्टर निष्पादन को रद्द कर सकते हैं।

कोई भी लंबित OnActionExecuted और OnActionExecuting फ़िल्टर नहीं लगाए जाएंगे और चालक रद्द फ़िल्टर के लिए या लंबित फ़िल्टर के लिए OnActionExecuted विधि को कॉल नहीं करेगा।

OnActionExecuted पहले रन फ़िल्टर के लिए फ़िल्टर चला जाएगा। OnResultExecutingandOnResultExecuted फ़िल्टर सभी चलाएंगे।

नमूना से निम्न कोड दिखाता है कि कैसे एक विशिष्ट ActionResult वापस जाने के लिए जब एक निश्चित शर्त OnActionExecuting में पूरा किया जाता है:

if (filterContext.RouteData.Values.ContainsValue("Cancel")) 
{ 
    filterContext.Result = new RedirectResult("~/Home/Index"); 
    Trace.WriteLine(" Redirecting from Simple filter to /Home/Index"); 
} 
+2

यह ध्यान दिया जाना चाहिए कि यदि आपके पास एक से अधिक फ़िल्टर हैं और फ़िल्टर मामलों का क्रम आपको अपने फ़िल्टर को पंजीकृत करते समय "ऑर्डर" पैरामीटर निर्दिष्ट करना चाहिए ताकि आप निष्पादन आदेश को नियंत्रित कर सकें क्योंकि रिक ने परिणाम के बारे में अपने विवरण में उल्लिखित किया है filterContext.Result संपत्ति व्यवहार करता है। –

+0

अच्छा बिंदु निक - लेकिन मेरा अनुभाग फ़िल्टर ऑर्डर देखें - ऑर्डर प्रॉपर्टी केवल उसी कक्षा में फ़िल्टर पर लागू होती है। औथ हमेशा पहले, अपवाद, अंतिम चलाते हैं। – RickAndMSFT

3

आप नीचे दिए गए कोड का उपयोग कर सकते।

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ... 
    if (needToRedirect) //your condition here 
    { 
     ... 
     filterContext.Result = new RedirectToAction(string action, string controller) 
     return; 
    } 
    ... 
} 

RedirectToAction आपको स्थिति के आधार पर विशिष्ट कार्रवाई को पुनर्निर्देशित करेगा।

+0

RedirectToAction एक विधि है (कम से कम एमवीसी 5 में) ताकि आप नया() इसे नहीं कर सकें। – rumblefx0

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