2012-12-19 9 views
5

में एक मॉडल पास करना मुझे उत्सुकता है कि यह कैसे काम करता है। एमवीसी में आप व्यू() को कॉल कर सकते हैं और पैरामीटर के रूप में एक मॉडल को पास कर सकते हैं, लेकिन रीडायरेक्ट टॉक्शन (कम से कम इसके अवतारों में से एक) 'रूटव्यूज' ऑब्जेक्ट लेता है, जो निकटतम मैच प्रतीत होता है।RedirectToAction()

यदि आपका मॉडल इस पैरामीटर में पारित किया गया है तो मॉडल प्रकार बाद की कार्रवाई विधि में उपलब्ध होगा? या क्या ऐसे चेतावनी शामिल हैं जो कुछ परिस्थितियों में सटीक अनुवाद को रोक सकती हैं?

+1

आप एक वास्तविक _model_ या एक _model_ _object_ बारे में बात कर रहे हैं? – OakNinja

+0

@ ओकिनजा - मैं 100% नहीं हूं कि आप दोनों के बीच क्या अंतर है? जब मैं 'मॉडल' कहता हूं तो मेरा मतलब है कि रेजर में '@ मॉडल' के रूप में टैग की गई वस्तु जो एक दृश्य के लिए उपलब्ध है और इसे नियंत्रक से पास कर दी गई है। मुझे पता है कि आप टेम्पलेट को रीडायरेक्ट करते समय एक मॉडल को अस्थायी भंडारण में रखने के लिए टेम्पपडेटा या व्यूबैग का उपयोग कर सकते हैं; क्या किसी को पता चलेगा कि रीडायरेक्ट करते समय आप एक पैरामीटर के रूप में क्यों नहीं पारित कर सकते हैं? व्यू() विधि में एक अधिभार है जो आपको ... सोच रहा है कि आप रीडायरेक्ट में ऐसा क्यों नहीं कर सकते हैं। – larryq

+1

_object_ दृढ़ता से टाइप किए गए दृश्य में पारित _model_ प्रकार है। असल में, दृश्य में @ मॉडल लाइन दृश्य को बताती है कि यह एक ऐसी वस्तु को पारित किया जाएगा जिसमें विशिष्ट मॉडल के गुण हों। इसे स्पष्ट बना दिया? यदि नहीं, तो मैं आपको उत्तर के रूप में एक अधिक व्यापक उत्तर दूंगा! – OakNinja

उत्तर

5

आप में पारित करने के लिए की जरूरत है कुछ-क्या जटिल वस्तुओं में एक रीडायरेक्ट के बाद एक कार्रवाई करने के लिए, तो आप शायद या तो एक सत्र या TempData उपयोग करना चाहते हैं:

से "What is ASP.NET MVC TempData"

ASP.NET एमवीसी TempData शब्दकोश नियंत्रक कार्यों के बीच डेटा साझा करने के लिए प्रयोग किया जाता है। TempData का मूल्य बनी रहती है जब तक यह बाहर पढ़ने के लिए या है वर्तमान उपयोगकर्ता के सत्र बार जब तक

डिफ़ॉल्ट रूप से TempData की जानकारी को बनाए करने के लिए एक सत्र का उपयोग करता है, तथापि, MVC के ज्यादा के साथ के रूप में, यह है, जहां एक तानाना बिंदु है यदि आप चाहें तो Cookie-based provider में प्लग इन कर सकते हैं।

+0

हाँ, मैं आमतौर पर ऑब्जेक्ट को TempData शब्दकोश में थप्पड़ मारता हूं। जिस क्रिया को आपने रीडायरेक्ट किया था, उसके बाद टेम्पाडाटा को यह देखने के लिए जांच करनी चाहिए कि उसके पास मॉडल उपलब्ध है या नहीं। – kdawg

2

Redirect... विधियां क्लाइंट-साइड-एंड-बैक ट्रिप का कारण बनती हैं, इसलिए - मॉडल उपलब्ध नहीं होगा।

4

आप वहां एक मॉडल ऑब्जेक्ट पास नहीं कर सकते हैं लेकिन आप अलग-अलग गुणों को पारित कर सकते हैं जो आपके द्वारा रीडायरेक्ट की गई कार्रवाई में किसी मॉडल को मैप करेंगे।

यह गुणों का उपयोग करने के लिए रीडायरेक्ट करने के लिए यूआरएल का निर्माण करके और प्राप्त करने वाली कार्रवाई में मॉडल बाइंडर का निर्माण करके काम करता है।

0

मैं इस बारे में सोच रहा है कि आप क्या चाहते:

  1. एक Tempdata

     RequestModel rq = new RequestModel() 
         ....assign something to your model.. 
         TempData["request"] = rq; 
    
         return Redirect("RequestAcknowledgement"); 
    
  2. में अपने मॉडल को सहेजें अब दृश्य आपको रीडायरेक्ट कर रहे हैं के लिए एक लड़ाई के परिणाम बना सकते हैं और अपने TempData वापस पारित एक मॉडल के लिए। फिर मॉडल को एक दृश्य में वापस करें।

    public ActionResult RequestAcknowledgement() 
        { 
         RequestsModel request = (RequestsModel)TempData["request"]; 
    
         return View(request); 
        } 
    
संबंधित मुद्दे