ViewData और TempData के बीच अंतर?


94

मुझे पता है कि ViewData क्या है और हर समय इसका उपयोग करते हैं, लेकिन ASP.NET पूर्वावलोकन 5 में उन्होंने कुछ नया पेश किया है जिसे TempData कहा जाता है।

मैं आमतौर पर वस्तुओं के दृष्टिकोण के शब्दकोश का उपयोग करने के बजाय, अपना ViewData टाइप करता हूं।

तो, मुझे ViewData के बजाय TempData का उपयोग कब करना चाहिए?

क्या इसके लिए कोई सर्वोत्तम प्रथाएं हैं?


जवाबों:


94

एक वाक्य में: TempDataएक अंतर से ViewData की तरह हैं: वे केवल दो क्रमिक अनुरोधों के बीच डेटा रखते हैं, उसके बाद वे नष्ट हो जाते हैं। आप TempDataत्रुटि संदेश या कुछ समान पास करने के लिए उपयोग कर सकते हैं ।

यद्यपि पुराना है, इस लेख में TempDataजीवनचक्र का अच्छा वर्णन है ।

जैसा कि बेन शेहिरमन ने यहां कहा था :

TempData एक सत्र-समर्थित अस्थायी संग्रहण शब्दकोश है जो एक एकल अनुरोध के लिए उपलब्ध है। नियंत्रकों के बीच संदेश पारित करना बहुत अच्छा है।


मुझे लगता है कि यह एक बहुत बड़ा अंतर है, TempDataजिसमें संभावित रूप से कुछ अधिक जटिल (सत्र) शामिल होगा , जो कि एक सरल शब्दकोष से विधि से विधि से पारित किया जा रहा है
मैटी विर्ककुनेन

29

जब कोई क्रिया RedirectToAction परिणाम देती है तो यह HTTP पुनर्निर्देशन (Response.Redirect के बराबर) का कारण बनता है। डेटा को एक HTTP HTTP पुनर्निर्देशित अनुरोध की अवधि के लिए नियंत्रक की TempData संपत्ति (शब्दकोश) में संरक्षित किया जा सकता है।


क्या एक ही मामले में ViewData का मूल्य संरक्षित किया जाएगा?
इस्माइल

9
@ ईमेल: नहीं, ViewData रीडायरेक्ट के माध्यम से डेटा को संरक्षित नहीं करेगा। यह TempData का मुख्य अंतर है।
Mariano Desanze

5

ViewData:

  • ViewData एक शब्दकोश प्रकार है public ViewDataDictionary ViewData { get; set; }
  • इसका उपयोग नियंत्रक से डेटा को देखने के लिए किया जा सकता है, केवल एक ही रास्ता
  • यह जीवन केवल वर्तमान अनुरोध के दौरान निहित है
  • यदि स्ट्रिंग गुजरती है तो टाइपकास्ट करने की आवश्यकता नहीं है
  • यदि पासिंग ऑब्जेक्ट है तो आपको इसे टाइप करने की आवश्यकता है लेकिन इससे पहले आपको यह जांचना होगा कि क्या यह अशक्त तो नहीं है
  • इसकी एक संपत्ति है ControllerBase, जो Controllerकक्षा का जनक है

TempData:

  1. TempDataआंतरिक रूप से उपयोग करें TempDataDictionary:public TempDataDictionary TempData { get; set; }
  2. एक बार डेटा TempDataDictionaryऑब्जेक्ट में सहेजा जाता है:
    • यह इसमें बनी रहती है और किसी भी नियंत्रक में किसी भी दृश्य या किसी भी कार्रवाई से पढ़ी जा सकती है
    • इसे केवल एक बार पढ़ा जा सकता है; एक बार पढ़ने के बाद, यह शून्य हो जाता है
    • यह सत्र में सहेजा जाता है ताकि सत्र डेटा समाप्त हो जाए।

यह व्यवहार ASP.NET MVC 2 और बाद के संस्करणों से नया है। ASP.NET MVC के पुराने संस्करणों में, मान TempDataकेवल अगले अनुरोध तक उपलब्ध थे।

  1. यह जीवित है, जब तक यह पढ़ा या सत्र समाप्त नहीं होता है और कहीं से भी पढ़ा जा सकता है।

एमवीसी में ViewData, ViewBag, TempData और सत्र की तुलना को विस्तार से देखें


4

मुझे यह तुलना उपयोगी लगी: http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html

एक गेटा मैं भर में आया था कि डिफ़ॉल्ट रूप से पढ़ने के बाद टेंपडाटा मान साफ ​​हो जाते हैं। विकल्प हैं, अधिक जानकारी के लिए Msdn पर 'Peek' और 'Keep' पद्धतियाँ देखें


0

जब हम नियंत्रक से संगत दृश्य में डेटा पास करना चाहते हैं तो दृश्य डेटा का उपयोग किया जाता है। देखें डेटा में बहुत कम जीवन होता है इसका मतलब है कि यह पुनर्निर्देशन होने पर नष्ट हो जाएगा। उदाहरण (नियंत्रक):

public ViewResult try1()
    {
        ViewData["DateTime"] = DateTime.Now;
        ViewData["Name"] = "Mehta Hitanshi";
        ViewData["Twitter"] = "@hitanshi";
        ViewData["City"] = "surat";
        return View();
    }

try1.cshtm

<table>
<tr>
    <th>Name</th>
    <th>Twitter</th>
    <th>Email</th>
    <th>City</th>
    <th>Mobile</th>
</tr>
<tr>
    <td>@ViewData["Name"]</td>
    <td>@ViewData["Twitter"]</td>
    <td>@ViewData["City"]</td>
</tr>
</table> 

TempData नियंत्रकों के बीच या कार्यों के बीच डेटा स्थानांतरित करता है। इसका उपयोग एक समय संदेशों को संग्रहीत करने के लिए किया जाता है और इसका जीवन बहुत छोटा होता है। हम TempData.Keep () का उपयोग करके इसे सभी कार्यों के माध्यम से या इसे लगातार बना सकते हैं।

उदाहरण (नियंत्रक):

public ActionResult try3()
    {
        TempData["DateTime"] = DateTime.Now;
        TempData["Name"] = "Ravina";
        TempData["Twitter"] = "@silentRavina";
        TempData["Email"] = "Ravina12@gmail.com";
        TempData["City"] = "India";
        TempData["MobNo"] = 9998975436;
        return RedirectToAction("TempView1");
    }
    public ActionResult TempView1()
    {
        return View();
    }

TempView1.cshtm

<table>
<tr>
    <th>Name</th>
    <th>Twitter</th>
    <th>Email</th>
    <th>City</th>
    <th>Mobile</th>
</tr>
<tr>
    <td>@TempData["Name"]</td>
    <td>@TempData["Twitter"]</td>
    <td>@TempData["Email"]</td>
    <td>@TempData["City"]</td>
    <td>@TempData["MobNo"]</td>
</tr>
</table>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.