2010-05-26 7 views

उत्तर

17

तुम भी बस सीधे विधि के लिए इतना तरह अनुप्रेषित सकता है:

public class ThisController 
{ 
    public ActionResult Index() 
    { 
     return RedirectToAction("OtherMethod", "OtherController"); 
    } 
} 
+0

हां और यदि मैं "अन्य विधि" से एक सूची वापस करना चाहता हूं? var परिणाम = RedirectToAction सूची वितरित नहीं करता है ... – eMi

10

तकनीकी रूप से, हाँ। आप नियंत्रक की एक स्थिर विधि को कॉल कर सकते हैं या इसके इंस्टेंस विधियों को कॉल करने के लिए नियंत्रक के उदाहरण को प्रारंभ कर सकते हैं।

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

public class ThisController { 
    public ActionResult Index() { 
    var other = new OtherController(); 
    other.OtherMethod(); 
    //OR 
    OtherController.OtherStaticMethod(); 
    } 
} 

तुम भी अन्य नियंत्रक, जो और अधिक समझ में आता है करने के लिए पर पुन: निर्देशित कर सकते हैं:

+2

सहमत हुए। अन्य नियंत्रक को कॉल करने के बजाए 'RedirectToRouteResult' वापस करने के लिए बेहतर है। –

7

ठीक है, वहाँ तरीके वास्तव में एक और नियंत्रक पर एक उदाहरण विधि कॉल या कि नियंत्रक प्रकार दूर एक स्थिर विधि कॉल करने की संख्या रहे हैं ।

public class ThisController { 
    public ActionResult Index() { 
    return RedirectToRoute(new {controller = "Other", action = "OtherMethod"}); 
    } 
} 

या आप केवल अपने ही वर्ग है, जो और भी अधिक समझ में आता है में आम कोड refactor सकता है।

public class OtherClass { 
    public void OtherMethod() { 
    //functionality 
    } 
} 

public class ThisController { 
    public ActionResult Index() { 
    var other = new OtherClass(); 
    other.OtherMethod(); 
    } 
} 
1

नियंत्रक के रूप में सिर्फ कक्षाएं तो हाँ, हम यह कर सकते हैं कर रहे हैं। हम निम्नलिखित तरीकों 1.By के कुछ लोगों द्वारा यह कर सकते हैं सीधे redirecting- return RedirectToAction("MethodName", "ControllerName");

2.By बनाने वस्तु - ControllerName objController=new ControllerName(); objController.methodName(parameters)

1

यह कोशिश करो।

var ctrl= new MyController(); 
ctrl.ControllerContext = ControllerContext; 
//call action 
return ctrl.Action(); 
संबंधित मुद्दे