मैं एक ASP.NET MVC 3 वेब अनुप्रयोग, जहां मैं TempData का उपयोग परिदृश्य में जहाँ उपयोगकर्ता में लॉग इन नहीं कर रहा है में एक मॉडल वस्तु स्टोर करने के लिए, पर काम कर रहा हूँTempData नहीं साफ किया
यहाँ प्रवाह है।:
- सबमिट फॉर्म का उपयोग करें।
- कोड (विशेष कार्रवाई फ़िल्टर) टेम्पन डेटा में मॉडल जोड़ता है, जो लॉगऑन पेज पर रीडायरेक्ट करता है। जो TempData पढ़ता है और कहता है सीधे
पोस्ट कार्रवाई चरण 3 के बाद
[HttpGet]
public ActionResult Foo()
{
var prefilled = TempData["xxxx"] as MyModel;
if (prefilled != null)
{
return Foo(prefilled);
}
}
[HttpPost]
[StatefulAuthorize] // handles the tempdata storage and redirect to logon page
public ActionResult Foo(MyModel model)
{
// saves to db.. etc
}
मैं this article पाया जिसमें कहा गया है:
- आइटम केवल एक अनुरोध के अंत में TempData से निकाल दिए जाते हैं अगर वे हटाने के लिए चिह्नित किया गया है
कोड यह रहा।
- आइटम केवल पढ़ने के लिए टैग किए जाने के लिए टैग किए जाते हैं।
- आइटम TempData को कॉल करके अनचाहे हो सकते हैं। रखें (कुंजी)।
- RedirectResult और RedirectToRouteResult हमेशा TempData.Keep() को कॉल करता है।
अच्छी तरह से इसे TempData["xxx"]
के साथ पढ़कर यह "पढ़ा नहीं गया" है और इसलिए उन्हें हटाने के लिए टैग किया जाना चाहिए?
और आखिरी व्यक्ति मुझे थोड़ा चिंतित करता है - क्योंकि मैं पोस्ट (पी-आर-जी) के बाद रीडायरेक्ट कर रहा हूं। लेकिन इससे बचा नहीं जा सकता है।
क्या कोई तरीका है कि मैं कह सकता हूं "इस आइटम को हटाएं"। TempData.Remove? या क्या मुझसे यह गलती हो रही है?
आपको एक पूर्ण पुनर्निर्देशन करने की आवश्यकता है और दूसरी क्रिया विधि वापस नहीं करनी है। यही कारण है कि यह काम नहीं कर रहा है। – Buildstarted
@ बिल्डल्डस्टार्ट - लेकिन पोस्ट विधि * समाप्त होने के बाद रीडायरेक्ट करता है। आप POST विधि पर रीडायरेक्ट नहीं कर सकते हैं, क्या यह एक GET नहीं होगा? – RPM1984
ठीक है, जो सीमित डेटा के आधार पर मैं पढ़ रहा हूं, वह यह है कि आप एक पोस्ट में कोड * प्राप्त करने और पुनर्निर्देशन * कर रहे हैं - कि 'स्टेटफुल प्राधिकृत' नहीं कहा जाएगा। – Buildstarted