asp.net-mvc
ViewData, ViewBag, TempData
खोज…
परिचय
ViewData
और ViewBag
का उपयोग कंट्रोलर से डेटा को देखने के लिए किया जाता है।
ViewData वस्तुओं के शब्दकोश के अलावा कुछ भी नहीं है और यह कुंजी के रूप में स्ट्रिंग द्वारा सुलभ है।
ViewBag, ViewData के समान है। ViewBag एक गतिशील संपत्ति है। ViewBag ViewData के चारों ओर एक आवरण है।
TempData HTTP अनुरोध के समय के लिए डेटा रखता है, जिसका अर्थ है कि यह लगातार दो अनुरोधों के बीच डेटा रखता है। TempData हमें नियंत्रकों के बीच या कार्यों के बीच डेटा स्थानांतरित करने में मदद करता है। आंतरिक रूप से सत्र का उपयोग करता है।
वाक्य - विन्यास
ViewData [कुंजी] = मूल्य;
ViewBag.Key = मूल्य;
टेंपडाटा [कुंजी] = मूल्य;
ViewData, ViewBag और TempData क्या हैं?
ViewData एक नियंत्रक के लिए एक ViewModel का उपयोग किए बिना, प्रस्तुत किए गए दृश्य को डेटा प्रदान करने के लिए एक तंत्र है। विशेष रूप से, ViewData एक शब्दकोश है जो MVC कार्रवाई विधियों और विचारों दोनों में उपलब्ध है। आप अपने डेटा को अपनी एक्शन विधि से एक्शन विधि द्वारा लौटाए गए दृश्य में स्थानांतरित करने के लिए ViewData का उपयोग कर सकते हैं।
चूंकि यह एक शब्दकोश है, आप डेटा को सेट करने और उससे प्राप्त करने के लिए वाक्यविन्यास जैसे शब्दकोश का उपयोग कर सकते हैं।
ViewData[key] = value; // In the action method in the controller
उदाहरण के लिए, यदि आप अपनी अनुक्रमणिका क्रिया विधि से अपने अनुक्रमणिका दृश्य Index.cshtml
एक संदेश Index.cshtml
, तो आप ऐसा कर सकते हैं।
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC";
return View(); // notice the absence of a view model
}
अपने Index.cshtml
दृश्य में इसे एक्सेस करने के लिए, आप केवल एक्शन विधि में उपयोग की गई कुंजी के साथ ViewData शब्दकोश का उपयोग कर सकते हैं।
<h2>@ViewData["Message"]</h2>
ViewBag अनकैप्ड ViewData शब्दकोश के गतिशील समकक्ष है। यह वाक्य रचना के चीनी अनुभव के लिए सी # dynamic
प्रकार का लाभ उठाता है।
ViewBag के लिए कुछ डेटा सेट करने का सिंटैक्स है
ViewBag.Key = Value;
इसलिए यदि हम ViewBag का उपयोग करके अपने पिछले उदाहरण में संदेश स्ट्रिंग पास करना चाहते हैं, तो यह होगा
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC";
return View(); // not the absence of a view model
}
और अपने सूचकांक दृश्य में,
<h2>@ViewBag.Message</h2>
डेटा ViewBag और ViewData के बीच साझा नहीं किया गया है। ViewData को जटिल डेटा प्रकारों से डेटा प्राप्त करने के लिए टाइपकास्टिंग की आवश्यकता होती है और त्रुटि मान से बचने के लिए अशक्त मानों की जांच करें क्योंकि व्यू बैग में छेड़छाड़ की आवश्यकता नहीं है।
TempData का उपयोग तब किया जा सकता है जब आप एक HTTP अनुरोध और केवल अगले HTTP अनुरोध के बीच डेटा को जारी रखना चाहते हैं। TempDataDictionary में संग्रहीत डेटा का जीवन दूसरे अनुरोध के बाद समाप्त होता है। तो TempData उन परिदृश्यों में उपयोगी है जहाँ आप PRG पैटर्न का अनुसरण कर रहे हैं।
[HttpPost]
public ActionResult Create(string name)
{
// Create a user
// Let's redirect (P-R-G Pattern)
TempData["Message"] = "User created successfully";
return RedirectToAction("Index");
}
public ActionResult Index()
{
var messageFromPreviousCall = TempData["Message"] as String;
// do something with this message
// to do : Return something
}
जब हम return RedirectToAction("SomeActionMethod")
, तो सर्वर return RedirectToAction("SomeActionMethod")
सेट किए गए लोकेशन हेडर वैल्यू के साथ क्लाइंट (ब्राउज़र) को 302 प्रतिसाद भेजेगा और ब्राउज़र इसके लिए एक नया अनुरोध करेगा। इन 2 कॉल के बीच कुछ डेटा साझा करने के लिए ViewBag / ViewData उस स्थिति में काम नहीं करेगा। आपको ऐसे परिदृश्यों में TempData का उपयोग करने की आवश्यकता है।
टेंपडाटा जीवन चक्र
TempData में सहेजा गया डेटा सत्र में संग्रहीत किया जाता है और पहले अनुरोध के अंत में स्वचालित रूप से हटा दिया जाएगा जहां डेटा एक्सेस किया जाता है। यदि कभी नहीं पढ़ा है, तो इसे अंत में पढ़ने या सत्र के समय तक रखा जाएगा।
विशिष्ट उपयोग निम्न अनुक्रम की तरह दिखता है (जहां प्रत्येक पंक्ति एक अलग अनुरोध से मंगाई गई है):
//first request, save value to TempData
TempData["value"] = "someValueForNextRequest";
//second request, read value, which is marked for deletion
object value = TempData["value"];
//third request, value is not there as it was deleted at the end of the second request
TempData["value"] == null
यह व्यवहार आगे Peek
और Keep
विधियों के साथ नियंत्रक हो सकता है।
Peek
साथ आप टेंपडाटा में संग्रहीत डेटा को हटाए बिना चिह्नित कर सकते हैं, इसलिए डेटा अभी भी भविष्य के अनुरोध पर उपलब्ध होगा//first request, save value to TempData TempData["value"] = "someValueForNextRequest"; //second request, PEEK value so it is not deleted at the end of the request object value = TempData.Peek("value"); //third request, read value and mark it for deletion object value = TempData["value"];
के साथ
Keep
आप निर्दिष्ट कर सकते हैं कि एक कुंजी जिसे हटाने के लिए चिह्नित किया गया था, वास्तव में बनाए रखा जाना चाहिए। इस मामले में डेटा को पुनर्प्राप्त करने और इसे हटाने से बचाने के लिए 2 विधि कॉल की आवश्यकता होती है://first request, save value to TempData TempData["value"] = "someValueForNextRequest"; //second request, get value marking it from deletion object value = TempData["value"]; //later on decide to keep it TempData.Keep("value"); //third request, read value and mark it for deletion object value = TempData["value"];
इसे ध्यान में रखते हुए, Peek
उपयोग करें जब आप हमेशा एक और अनुरोध के लिए मूल्य को बनाए रखना चाहते हैं और मूल्य को बनाए रखते हुए Keep
उपयोग करें अतिरिक्त तर्क पर निर्भर करता है।