रीडायरेक्ट से पहले व्यूबैग सेट करें


122

क्या ViewBagमुझे पुनर्निर्देशन से पहले कॉल करना संभव है ?

मुझे कुछ चाहिए:

@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");

जवाबों:


242

जब आप पुनर्निर्देशन का उपयोग करते हैं, तो आप उपयोग नहीं करेंगे ViewBag, लेकिनTempData

public ActionResult Action1 () {
 TempData["shortMessage"] = "MyMessage";
 return RedirectToAction("Action2");
}

public ActionResult Action2 () {
 //now I can populate my ViewBag (if I want to) with the TempData["shortMessage"] content
  ViewBag.Message = TempData["shortMessage"].ToString();
  return View();
}

1
यदि आपके पास दृश्य में नहीं है तो आपके पास @ViewBag क्यों है?
apkisbossin

6
मैं उत्तर को पूरा करना चाहूंगा क्योंकि मैं इसका उपयोग कर रहा हूं और मुझे एक छोटी सी समस्या का सामना करना पड़ा है जब कि टेंपडाटा किसी कारण से खाली है (मेरे मामले में मेरे पास केवल एक संदेश है जब एक रूपांतरण होता है)। इसलिए मुझे एक त्रुटि से बचने के लिए अगर (TempData ["संदेश"]! = Null) का परीक्षण करना पड़ा।
पैट्रिक

1
क्या होगा यदि पुनर्निर्देशन अन्य नियंत्रक के लिए है? अन्य कंट्रोलर की कार्रवाई में ViewBag, TempData और सत्र सभी खाली हैं!
एंड्रयू

1
@ अच्छी तरह से, TempData एक विशिष्ट नियंत्रक से संबंधित नहीं है। शायद आप एक से अधिक पुनर्निर्देशन करते हैं, और टेंपडाटा खो देते हैं? आप कुछ कोड के साथ एक नए प्रश्न से लिंक कर सकते हैं ...
Raphaël Althaus

मैं एक फिल्टर विशेषता के OnAuthorize मेटीओड में उन लोगों को सेट करने की कोशिश कर रहा था, लेकिन किसी ने काम नहीं किया, इसलिए मैंने डेटा पास करने के लिए क्वेरी स्ट्रिंग का उपयोग करके समाप्त किया। दूसरे तरीके के आसपास, नियंत्रक में TempData की स्थापना तब काम की जब मुझे बाद में फ़िल्टर विशेषता में पढ़ने की आवश्यकता थी। धन्यवाद!
एंड्रयू

13

आप इस स्थिति में TempData का उपयोग कर सकते हैं। यहाँ ViewBag, ViewData और TempData के लिए कुछ स्पष्टीकरण दिया गया है।


8

मुझे यह पसंद आया..और इसके लिए मेरे लिए काम कर रहा हूं ... यहां मैं पासवर्ड बदल रहा हूं और सफलता पर मैं सफलता के संदेश को सेट करने के लिए व्यूबैग पर प्रदर्शित करना चाहता हूं ...

    public ActionResult ChangePass()
    {
        ChangePassword CP = new ChangePassword();
        if (TempData["status"] != null)
        {
            ViewBag.Status = "Success";
            TempData.Remove("status");
        }
        return View(CP);
    }

    [HttpPost]
    public ActionResult ChangePass(ChangePassword obj)
    {
        if (ModelState.IsValid)
        {
            int pid = Session.GetDataFromSession<int>("ssnPersonnelID");
            PersonnelMaster PM = db.PersonnelMasters.SingleOrDefault(x => x.PersonnelID == pid);

            PM.Password = obj.NewPassword;
            PM.Mdate = DateTime.Now;
            db.SaveChanges();

            TempData["status"] = "Success";
            return RedirectToAction("ChangePass");
        }

        return View(obj);
    }

3

यहां से ले गए

सारांश

ViewData और ViewBag ऑब्जेक्ट्स आपको डेटा के उन अतिरिक्त टुकड़ों को एक्सेस करने के तरीके देते हैं जो आपके मॉडल के साथ-साथ चलते हैं, हालांकि अधिक जटिल डेटा के लिए, आप ViewModel तक जा सकते हैं। दूसरी ओर, TempData को HTTP रीडायरेक्ट पर डेटा के साथ काम करने के लिए विशेष रूप से तैयार किया गया है, इसलिए TempData का उपयोग करते समय सतर्क रहना याद रखें।


-2

या आप विकल्प के लिए सत्र का उपयोग कर सकते हैं:

Session["message"] = "MyMessage";
RedirectToAction("MyAction");

और जब भी जरूरत हो तब उसे कॉल करें।

अपडेट करें

इसके अलावा, जैसा कि @James ने अपनी टिप्पणी में कहा है, अवांछित जंक डेटा या पुराने मूल्य से बचने के लिए इसका उपयोग करने के बाद उस विशिष्ट सत्र के मूल्य को शून्य या स्पष्ट करना सुरक्षित होगा।


4
मैं उस पर सहमत नहीं हूं। इसके लिए सत्र का उपयोग न करें।
महमूदवक्स 11:27

2
यह एक विकल्प है। यह कुछ स्थितियों में बेहतर है।
csharpforevermore

सत्र चर उन चीजों के लिए उपयोगी होते हैं जिन्हें आपको कई पोस्ट / प्राप्तियों के बीच रखने की आवश्यकता होती है। इस तरह के एक-बंद उपयोग के लिए, आपको इसे खाली करने के लिए याद रखना होगा, या यह बाद में रद्दी डेटा होगा, कुछ स्क्रीन पर अवांछित दिखाई दे रहा है, या यहां तक ​​कि तर्क को संदर्भ से बाहर भी ट्रिगर कर सकता है।
जेम्स

@ जेम्स बिल्कुल, यही मैं कुछ मामलों के लिए करता हूं जो मुझे इस दृष्टिकोण का उपयोग करने की आवश्यकता है। उपयोग के बाद इसके मूल्य को कम करना या साफ करना इन जैसे मामलों के लिए बहुत जरूरी है।
जॉन पी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.