2017-04-18 10 views
5

RedirectToAction जानना, मैं उपयोगकर्ता के लिए यूआरएल स्थिर रखने के समान कुछ ढूंढ रहा था और अभी भी एक क्रिया से दूसरे कार्यवाही को जिम्मेदार ठहराता हूं।क्या कुछ है "रिवाइटटॉक्शन"?

चूंकि मुझे इस विषय पर zero Google results मिला, इसलिए मैं पूरी तरह से XY problem को हल करने का प्रयास कर सकता हूं।

फिर भी, मैं यह बताने की कोशिश करूंगा कि मुझे क्यों विश्वास है कि इसकी आवश्यकता हो सकती है।

परिदृश्य:

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 

    // This compiles. 
    return RedirectToAction("B", new { uniqueID }); 

    // This does not compile. 
    return RewriteToAction("B", new { uniqueID }); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

उपरोक्त कोड में, कार्रवाई एक एक एक पूर्णांक से guid की गणना करता है और एक अन्य कार्रवाई करने के लिए यह गुजरता है।

वर्कअराउंड:

मैं कुछ इस तरह करने के लिए ऊपर दिए गए कोड को बदल सकता है:

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 
    var model = DoCreateModelForUnique(uniqueID); 

    return View("B", model); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

यह अपेक्षा के अनुरूप काम करेंगे।

फिर भी, अधिक जटिल परिदृश्यों में, मुझे हर समय और फिर उपयोग करने के लिए "सर्वर-साइड रीडायरेक्ट" (उर्फ रीराइट) होना पसंद है।

वैकल्पिक वैकल्पिक हल:

मैं भी HttpContext.RewritePath इस्तेमाल कर सकते हैं, उदाहरण के लिए एक rewrite करने के लिए global.asax के Application_BeginRequest के अंदर।

यह मुझे "एमवीसी संदर्भ से बाहर" लगता है, भले ही यह अपेक्षित काम करता है।

मेरा प्रश्न:

वहाँ एक सुंदर, RewriteToAction की तरह कुछ करने का MVC-एकीकृत तरीका है?

अद्यतन 1:

Luke commented एक होनहार लिंक:

How to simulate Server.Transfer in ASP.NET MVC?

इस मेरी जरूरतों फिट बैठता है कि क्या मैं, जांच करने के लिए कोशिश करेंगे।

+2

मुझे नहीं लगता कि यह आपकी आवश्यकताओं को पूरा करेगा? http://stackoverflow.com/a/1180744/894792 या http://stackoverflow.com/a/1242525/894792 – Luke

+0

यह बहुत ही आशाजनक लग रहा है, @ ल्यूक, मैं एक नज़र डालेगा, बहुत बहुत धन्यवाद। –

+1

शुभकामनाएँ मेरे दोस्त! : ओ) – Luke

उत्तर

2

कैसे

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 

    return B(uniqueID); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

के बारे में?

+0

बस कार्रवाई विधि को बुलाओ। वह साफ दिखता है। धन्यवाद! –

+1

आपका स्वागत है। यदि यह आपके लिए काम करता है, तो क्या आप उत्तर स्वीकार कर सकते हैं? धन्यवाद –

+0

ज़रूर! मैं एक और प्रतिक्रिया प्राप्त करने के लिए, कुछ और दिनों का इंतजार करने की कोशिश करूंगा। –

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