दिलचस्प पोस्ट
वहाँ एक अच्छा jQuery खींचें और ड्रॉप फ़ाइल अपलोड प्लगइन है? नोक्लास डीफफाउंड एरर – ग्रहण और एंड्रॉइड सी # में कई इनपुट डिवाइस के बीच अंतर कैसे करें जावा का उपयोग कर वर्तमान मशीन का आईपी पता प्राप्त करना सी # प्री- और पोस्ट इंक्रीमेंट भ्रम मैं पायथन में SIGINT कैसे कैद कर सकता हूं? टूलबार के नीचे प्रदर्शित करने के लिए मैं ड्रेवरलायआउट कैसे करूं? java.util.zip – डायरेक्टरी संरचना का पुन: निर्माण करना किस उपयोगकर्ता को स्क्रिप्ट चलाने के द्वारा क्रॉन्टाब में निर्दिष्ट किया जाए? JQuery का उपयोग करके इनपुट अक्षम विशेषता को टॉगल करें Linq- टू-संस्थाओं – शामिल करें () विधि लोड नहीं हो रही है रूबी: मल्टीपार्ट / फ़ॉर्म-डेटा के रूप में HTTP द्वारा फ़ाइल कैसे पोस्ट करें? कैसे मंगलोड में कई सरणी तत्वों को अद्यतन करें चर-लंबाई में बैलेंसिंग समूहों को देखने के लिए सॉकेट कनेक्ट टाइमआउट को कॉन्फ़िगर करने के लिए कैसे करें

ViewBag, ViewData और TempData

क्या किसी भी शरीर को समझाया जा सकता है, इसका उपयोग कब करना है

  1. TempData
  2. ViewBag
  3. ViewData

मेरे पास एक आवश्यकता है, जहां मुझे एक नियंत्रक में एक मान सेट करने की आवश्यकता है, वह नियंत्रक नियंत्रक दो को रीडायरेक्ट करेगा और नियंत्रक दो दृश्य प्रस्तुत करेगा।

मैंने ViewBag का उपयोग करने की कोशिश की है, जब तक मैं नियंत्रक दो तक पहुंचता हूं, तब मान खो जाता है।

क्या मैं जान सकता हूँ कि कब का उपयोग करना और फायदे या नुकसान हैं?

धन्यवाद

वेब के समाधान से एकत्रित समाधान "ViewBag, ViewData और TempData"

1) TempData

आपको उस डेटा को संग्रहीत करने की अनुमति देता है जो किसी रीडायरेक्ट के लिए जीवित रहेगा। आंतरिक तौर पर यह सत्र को बेकिंग स्टोर के रूप में उपयोग करता है, यह ठीक है कि रीडायरेक्ट के बाद डेटा स्वचालित रूप से बेदखल हो जाता है। पैटर्न निम्न है:

public ActionResult Foo() { // store something into the tempdata that will be available during a single redirect TempData["foo"] = "bar"; // you should always redirect if you store something into TempData to // a controller action that will consume this data return RedirectToAction("bar"); } public ActionResult Bar() { var foo = TempData["foo"]; ... } 

2) देखेंबैग, देखेंडेटा

आपको एक नियंत्रक कार्रवाई में डेटा संग्रहीत करने की अनुमति देता है जो इसी दृश्य में उपयोग किया जाएगा यह मानता है कि एक्शन एक दृश्य देता है और रीडायरेक्ट नहीं करता है। वर्तमान अनुरोध के दौरान ही जीवन।

पैटर्न निम्न है:

 public ActionResult Foo() { ViewBag.Foo = "bar"; return View(); } 

और इस दृश्य में:

 @ViewBag.Foo 

या ViewData के साथ:

 public ActionResult Foo() { ViewData["Foo"] = "bar"; return View(); } 

और इस दृश्य में:

 @ViewData["Foo"] 

ViewBag केवल एक गतिशील आवरण ViewBag आसपास है और केवल एएसपी.नेट एमवीसी 3 में मौजूद है।

यह कहा जा रहा है, उन दो constructs में से कोई भी कभी भी इस्तेमाल किया जाना चाहिए। आपको दृश्य मॉडल और दृढ़तापूर्वक टाइप किए गए विचारों का उपयोग करना चाहिए। तो सही पैटर्न निम्नलिखित है:

मॉडल देखें:

 public class MyViewModel { public string Foo { get; set; } } 

क्रिया:

 public Action Foo() { var model = new MyViewModel { Foo = "bar" }; return View(model); } 

दृढ़ता से टाइप किए गए दृश्य:

 @model MyViewModel @Model.Foo 

इस संक्षिप्त परिचय के बाद अपने प्रश्न का उत्तर दें:

मेरी आवश्यकता है कि मैं एक नियंत्रक में एक मान सेट करना चाहता हूं, नियंत्रक नियंत्रक को दोबारा रीडायरेक्ट करेगा और नियंत्रक 2 देखेंगे।

 public class OneController: Controller { public ActionResult Index() { TempData["foo"] = "bar"; return RedirectToAction("index", "two"); } } public class TwoController: Controller { public ActionResult Index() { var model = new MyViewModel { Foo = TempData["foo"] as string }; return View(model); } } 

और संबंधित दृश्य ( ~/Views/Two/Index.cshtml ):

 @model MyViewModel @Html.DisplayFor(x => x.Foo) 

साथ ही टेम्पटडाटा का उपयोग करने की कमी है: अगर उपयोगकर्ता लक्ष्य पृष्ठ पर एफ 5 को मारता है तो डेटा खो जाएगा।

निजी तौर पर मैं टेम्पेडाटा का उपयोग न करें ऐसा इसलिए है क्योंकि आंतरिक रूप से यह सत्र का उपयोग करता है और मैं अपने अनुप्रयोगों में सत्र अक्षम करता हूँ। मैं इसे हासिल करने के लिए एक अधिक रसीला तरीका पसंद करता हूं। कौन सा है: पहली नियंत्रक कार्रवाई में जो आपके डेटा संग्रह में ऑब्जेक्ट पुनर्निर्देशित करता है और उपयोगकर्ता को पुननिर्देशित करते समय उत्पन्न अनन्य आईडी करता है। तब लक्ष्य क्रिया पर इस आईडी का उपयोग प्रारंभिक संग्रहीत ऑब्जेक्ट को वापस लाने के लिए करें:

 public class OneController: Controller { public ActionResult Index() { var id = Repository.SaveData("foo"); return RedirectToAction("index", "two", new { id = id }); } } public class TwoController: Controller { public ActionResult Index(string id) { var model = new MyViewModel { Foo = Repository.GetData(id) }; return View(model); } } 

दृश्य एक ही रहता है

एएसपी.नेट एमवीसी हमें अगले विकल्प में देखने और देखने के लिए नियंत्रक से डेटा प्राप्त करने के लिए तीन विकल्प देखेंडेटाटा, व्यूबैग, और टेम्पेडाटा प्रदान करता है। ViewData और ViewBag लगभग समान हैं और TempData अतिरिक्त जिम्मेदारी करता है। उन तीन वस्तुओं पर चर्चा करें या मुख्य बिंदुओं पर जाएं:

ViewBag और ViewData के बीच समानताएं:

  • जब आप नियंत्रक से देखने के लिए जाते हैं तो डेटा को बनाए रखने में सहायता करता है
  • नियंत्रक से संबंधित दृश्य से डेटा पास करने के लिए उपयोग किया जाता है
  • लघु जीवन का मतलब है कि जब रीडायरेक्शन होता है तो मूल्य शून्य हो जाता है। ऐसा इसलिए है क्योंकि उनका लक्ष्य नियंत्रकों और विचारों के बीच संवाद करने का एक तरीका प्रदान करना है यह सर्वर कॉल के भीतर एक संचार तंत्र है।

ViewBag और ViewData के बीच का अंतर:

  • ViewData ऑब्जेक्ट्स का एक डिक्शनरी है जो कि व्यू डटाएस्टाइड क्लास से प्राप्त होता है और स्ट्रिंग्स को चाबियों के रूप में एक्सेस करता है।
  • ViewBag एक गतिशील संपत्ति है जो सी # 4.0 में नई गतिशील सुविधाओं का लाभ उठाती है।
  • ViewData जटिल डेटा प्रकार के लिए टाइपकास्टिंग की आवश्यकता है और त्रुटि से बचने के लिए रिक्त मानों की जांच करें
  • ViewBag को जटिल डेटा प्रकार के लिए टाइपकास्टिंग की आवश्यकता नहीं है।

ViewBag & ViewData उदाहरण:

 public ActionResult Index() { ViewBag.Name = "Monjurul Habib"; return View(); } public ActionResult Index() { ViewData["Name"] = "Monjurul Habib"; return View(); } 

दृश्य में:

 @ViewBag.Name @ViewData["Name"] 

TempData:

TempData भी एक शब्दकोश है जो TempDataDictionary वर्ग से प्राप्त किया गया है और लघु जीवन सत्र में संग्रहीत है और यह एक स्ट्रिंग कुंजी और वस्तु मान है। अंतर यह है कि वस्तु का जीवन चक्र। TempData एक HTTP अनुरोध के समय के लिए जानकारी रखें। इसका मतलब केवल एक पृष्ठ से दूसरे तक है यह 302/303 पुनर्निर्देशन के साथ काम करता है क्योंकि यह एक ही HTTP अनुरोध में है। जब आप एक नियंत्रक से दूसरे नियंत्रक के पास जाते हैं या किसी एक कार्य से दूसरे कार्य के लिए जाते हैं तो डेटा को बनाए रखने में सहायता करता है दूसरे शब्दों में जब आप पुनर्निर्देशित करते हैं, तो "TempData" उन रीडायरेक्ट्स के बीच डेटा को बनाए रखने में सहायता करता है। यह आंतरिक सत्र चर का उपयोग करता है वर्तमान और बाद के अनुरोध के दौरान अस्थायी डेटा का उपयोग केवल इसका मतलब है कि जब यह सुनिश्चित किया जाता है कि अगले अनुरोध अगले दृश्य पर पुनः निर्देशित हो जाएगा जटिल डेटा प्रकार के लिए टाइपकास्टिंग की आवश्यकता होती है और त्रुटि से बचने के लिए शून्य मानों की जांच करें। आम तौर पर केवल एक बार संदेश भेजने जैसे त्रुटि संदेश, सत्यापन संदेश।

 public ActionResult Index() { var model = new Review() { Body = "Start", Rating=5 }; TempData["ModelName"] = model; return RedirectToAction("About"); } public ActionResult About() { var model= TempData["ModelName"]; return View(model); } 

आखिरी तंत्र सत्र है जो व्यूडेटा की तरह काम करता है, जैसे कि एक कुंजीशब्द के लिए स्ट्रिंग और मूल्य के लिए ऑब्जेक्ट लेते हैं। यह एक क्लाइंट कुकी में संग्रहित है और इसे अधिक लंबा समय के लिए उपयोग किया जा सकता है। इसके पास किसी भी गोपनीय जानकारी को कभी भी अधिक सत्यापन की आवश्यकता नहीं है। ViewData या ViewBag के बारे में आपको इसे एप्लिकेशन प्रदर्शन के लिए समझदारी से उपयोग करना चाहिए क्योंकि प्रत्येक क्रिया नियमित asp.net mvc अनुरोध के पूरे जीवन चक्र के माध्यम से जाती है। आप अपने बच्चे की कार्रवाई में ViewData / ViewBag का उपयोग कर सकते हैं लेकिन सावधान रहें कि आप असंबंधित डेटा को पॉप्युलेट करने के लिए इसका उपयोग नहीं कर रहे हैं जो आपके नियंत्रक को दूषित कर सकता है।

TempData

असल में यह डेटारडर जैसा है, एक बार पढ़ा जाता है, डेटा खो जाएगा।

इस वीडियो की जाँच करें

उदाहरण

 public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; TempData["T"] = "T"; return RedirectToAction("About"); } public ActionResult About() { return RedirectToAction("Test1"); } public ActionResult Test1() { String str = TempData["T"]; //Output - T return View(); } } 

यदि आप उपरोक्त कोड पर ध्यान देते हैं, तो TempData पढ़ा जाने तक रीडायरेक्ट टाईएक्शन का TempData पर कोई प्रभाव नहीं पड़ता है। इसलिए, एक बार टेम्पाडेटा पढ़ा जाता है, मान खो जाएंगे।

पढ़ने के बाद मैं कैसे TempData रख सकता हूं?

कार्य विधि 1 टेस्ट और टेस्ट 2 में आउटपुट की जांच करें

 public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; TempData["T"] = "T"; return RedirectToAction("About"); } public ActionResult About() { return RedirectToAction("Test1"); } public ActionResult Test1() { string Str = Convert.ToString(TempData["T"]); TempData.Keep(); // Keep TempData return RedirectToAction("Test2"); } public ActionResult Test2() { string Str = Convert.ToString(TempData["T"]); //OutPut - T return View(); } } 

यदि आप उपरोक्त कोड पर ध्यान देते हैं, डेटा रीडायरेक्ट करेंअक्शन के साथ-साथ डेटा को पढ़ने के बाद भी नहीं खोया जाता है और कारण यह है, हम TempData.Keep() का उपयोग कर रहे हैं। क्या वह

इस तरह से आप इसे तब तक जारी रख सकते हैं जब तक कि आप अन्य नियंत्रकों में भी चाहते हों।

ViewBag / ViewData

डेटा संबंधित दृश्य में जारी रहेगा

ViewBag, ViewData, TempData और देखें राज्य MVC में

http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html

एएसपी.नेट एमवीसी हमें अगले विकल्प में देखने और देखने के लिए नियंत्रक से डेटा पास करने के लिए तीन विकल्प देखेंडेटाटा, वीबैग और टेम्पाडाटा प्रदान करता है। ViewData और ViewBag लगभग समान हैं और TempData अतिरिक्त जिम्मेदारी करता है।

ViewBag और ViewData के बीच समानताएं:

जब आप नियंत्रक से देखने के लिए जाते हैं तो डेटा को बनाए रखने में सहायता करता है नियंत्रक से संबंधित दृश्य से डेटा पास करने के लिए उपयोग किया जाता है लघु जीवन का मतलब है कि जब रीडायरेक्शन होता है तो मूल्य शून्य हो जाता है। ऐसा इसलिए है क्योंकि उनका लक्ष्य नियंत्रकों और विचारों के बीच संवाद करने का एक तरीका प्रदान करना है यह सर्वर कॉल के भीतर एक संचार तंत्र है।

ViewBag और ViewData के बीच का अंतर:

ViewData ऑब्जेक्ट्स का एक डिक्शनरी है जो कि व्यू डटाएस्टाइड क्लास से प्राप्त होता है और स्ट्रिंग्स को चाबियों के रूप में एक्सेस करता है। ViewBag एक गतिशील संपत्ति है जो सी # 4.0 में नई गतिशील सुविधाओं का लाभ उठाती है। ViewData जटिल डेटा प्रकार के लिए टाइपकास्टिंग की आवश्यकता है और त्रुटि से बचने के लिए रिक्त मानों की जांच करें ViewBag को जटिल डेटा प्रकार के लिए टाइपकास्टिंग की आवश्यकता नहीं है।

ViewBag & ViewData उदाहरण:

 public ActionResult Index() { ViewBag.Name = "Arun Prakash"; return View(); } public ActionResult Index() { ViewData["Name"] = "Arun Prakash"; return View(); } 

दृश्य में, हम नीचे की तरह कॉल करते हैं:

 @ViewBag.Name @ViewData["Name"] 

TempData:

जब आप एक नियंत्रक से दूसरे नियंत्रक के पास जाते हैं या किसी एक कार्य से दूसरे कार्य के लिए जाते हैं तो डेटा को बनाए रखने में सहायता करता है दूसरे शब्दों में जब आप पुनर्निर्देशित करते हैं, तो "टेम्पाडेटा" उन रीडायरेक्ट्स के बीच डेटा को बनाए रखने में मदद करता है। यह आंतरिक सत्र चर का उपयोग करता है TempData एक बहुत ही अल्पकालिक उदाहरण के लिए होती है, और आपको इसे केवल वर्तमान और बाद के अनुरोधों के दौरान ही उपयोग करना चाहिए

एकमात्र ऐसा परिदृश्य है जहां टेम्पेडाटा का उपयोग करना मज़बूती से काम करेगा, जब आप रीडायरेक्ट कर रहे हैं। इसका कारण यह है कि एक पुनर्निर्देशन ने वर्तमान अनुरोध को मार डाला (और एचटीटीपी स्थिति कोड 302 ऑब्जेक्ट को क्लाइंट में ले जाया जाता है), फिर पुनर्निर्देशित दृश्य की सेवा के लिए सर्वर पर एक नया अनुरोध बनाता है।

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

 public ActionResult Index() { var model = new Review() { Body = "Start", Rating=5 }; TempData["ModelName"] = model; return RedirectToAction("About"); } public ActionResult About() { var model= TempData["ModelName"]; return View(model); } 

Asp.Net MVC में TempData बहुत ही उपयोगी विशेषता में से एक है। इसका प्रयोग वर्तमान अनुरोध से बाद के अनुरोध के लिए डेटा पास करने के लिए किया जाता है। दूसरे शब्दों में, अगर हम डेटा को एक पृष्ठ से दूसरे पृष्ठ पर भेजना चाहते हैं, जबकि पुनर्निर्देशन होता है, हम टेम्पाडेटा का उपयोग कर सकते हैं, लेकिन हमें एमवीसी में इस सुविधा को प्राप्त करने के लिए कोड में कुछ विचार करना चाहिए। क्योंकि TempData का जीवन बहुत ही छोटा है और केवल झलकता है जब तक लक्ष्य दृश्य पूरी तरह भरी हुई नहीं होती है। लेकिन, हम TempData में डेटा जारी रखने के लिए Keep () विधि का उपयोग कर सकते हैं।

और पढो

 void Keep() Calling this method with in the current action ensures that all the items in TempData are not removed at the end of the current request. @model MyProject.Models.EmpModel; @{ Layout = "~/Views/Shared/_Layout.cshtml"; ViewBag.Title = "About"; var tempDataEmployeet = TempData["emp"] as Employee; //need typcasting TempData.Keep(); // retains all strings values } void Keep(string key) Calling this method with in the current action ensures that specific item in TempData is not removed at the end of the current request. @model MyProject.Models.EmpModel; @{ Layout = "~/Views/Shared/_Layout.cshtml"; ViewBag.Title = "About"; var tempDataEmployeet = TempData["emp"] as Employee; //need typcasting TempData.Keep("emp"); // retains only "emp" string values } 

TempData हमेशा पहले पढ़े जाने तक उपलब्ध रहेगा, एक बार जब आप इसे पढ़ते हैं, तो इसे उपलब्ध नहीं होने पर किसी भी अधिक त्वरित संदेश को पारित करने के लिए भी उपयोगी हो सकता है, यह देखने के लिए कि पहले पढ़ने के बाद चले गए होंगे। व्यूबैग यह अधिक उपयोगी है जब डेटा का त्वरित रूप से दृश्य के पास गुजर रहा है, आम तौर पर आपको सभी डेटा को मॉडल के जरिये देखा जाना चाहिए, लेकिन ऐसे मामलों में जब आप मॉडल से सीधे आते हैं, जो कि उस डेटाबेस में इकाई ढांचा की तरह डेटाबेस है जो आप डॉन क्या एक नया टुकड़ा डेटा पास करने के लिए आपको मॉडल बदलने के लिए, आप इसे रोक सकते हैं कि व्यू-बैक व्यूडेटा में केवल दृश्यबैग का अनुक्रमित संस्करण है और इसका उपयोग पहले MVC3

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