2010-11-13 11 views
5

काम नहीं करता है कोई विचार नीचे दिए गए कैसे ठीक करें?एमवीसी 3 आरसी में ट्रांसफर रिजल्ट कार्यान्वित करना -

ट्रांसफर रिसेट का एक बड़ा कार्यान्वयन here उपलब्ध है, जो एमवीसी 1,2 पर बहुत अच्छा काम करता है लेकिन एमवीसी 3 आरसी पर काम नहीं करता है।

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url): base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = HttpContext.Current; 
     httpContext.RewritePath(Url, false); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

MVC 3 आर सी पर, httpHandler.ProcessRequest विफल रहता है और 'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.

यह कैसे काम बनाने के लिए इस कोड को फिर से लिखने के लिए कहते हैं?

यूपीडी: वीएस 2010 अंतर्निहित विकास सर्वर पर चलने पर कोड काम करता है, लेकिन आईआईएस 7.5 लोकहोस्ट पर चलाने में विफल रहता है। समस्या अभी भी अनसुलझा है।

UPD2 यह answer contains a modified implementation ट्रांसफर रिसेट के जो एमवीसी 3 के साथ काम करता है। बाहर निकलता है यह जितना आसान होता है उससे भी आसान होता है।

+0

क्या तुमने कभी ठीक किया यह समस्या? –

+1

हां, यहां कामकाजी समाधान है: http://stackoverflow.com/questions/799511/how-to-simulate-server-transfer-in-asp-net-mvc/1242525#1242525 – Andy

उत्तर

0

व्यक्तिगत रूप से मुझे लगता है कि मार्ग बनाना (यदि आवश्यक हो तो रूट बाधाओं के साथ (http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx देखें) इस 'हैक' के लिए काफी बेहतर है जो एक अदृश्य रीडायरेक्ट करने का प्रयास करता है ताकि अनुरोध एक अलग नियंत्रक और कार्रवाई से किया जा सके मार्ग द्वारा निर्दिष्ट

आप क्यों नहीं बस रूटिंग का उपयोग नहीं कर सकते हैं

+1

मैं त्रुटि प्रबंधन को कार्यान्वित करने के लिए TransferResult का उपयोग करता हूं : वर्तमान पृष्ठ क्रिया या दृश्य संसाधित किया जा रहा है, और यदि कुछ होता है, तो स्थानांतरण निष्पादित किया जाता है। – Andy

1

पुन: पेश करने में असमर्थ निम्नलिखित काम करता है MVC 3 में बिल्कुल ठीक आर सी (उस्तरा और WebForms):।?।

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url) 
     : base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = HttpContext.Current; 
     httpContext.RewritePath(Url, false); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return new TransferResult("/Home/About"); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 
+1

यह कोड डिबगिंग के लिए विजुअल स्टूडियो डेव सर्वर का उपयोग करते हुए ठीक से काम करता है। हालांकि स्थानीय आईआईएस सर्वर पर ऐप चलाने पर मुझे उपर्युक्त त्रुटि का अनुभव होता है। मुझे अभी तक एक दूरस्थ सर्वर पर ऐप का परीक्षण करने का मौका नहीं मिला, लेकिन मैंने स्थानीय मशीन पर इन दो कॉन्फ़िगरेशन में व्यवहार में अंतर को स्पष्ट रूप से देखा। – Andy

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