ViewData और ViewBag के बीच अंतर क्या है?


जवाबों:


388

यह C # 4.0 डायनामिक फीचर का उपयोग करता है। यह दृश्यता के समान लक्ष्य को प्राप्त करता है और दृढ़ता से टाइप किए गए दृश्य मॉडल का उपयोग करने के पक्ष में बचा जाना चाहिए (जिस तरह से दृश्यता से बचा जाना चाहिए)।

तो मूल रूप से यह जादू के तार की जगह लेता है :

ViewData["Foo"]

जादू गुणों के साथ :

ViewBag.Foo

जिसके लिए आपके पास कोई संकलित समय सुरक्षा नहीं है।

मैं एमवीसी में इस अवधारणा को पेश करने के लिए Microsoft को दोष देना जारी रखता हूं।

गुणों के नाम पर मामला संवेदनशील है।


11
किस उद्देश्य से आप Microsoft को दोष दे रहे हैं? अगर कोई दृश्यदता नहीं है तो हम मॉडल से ड्रॉपडेललिस्ट को कैसे बांध सकते हैं। (मुझे नहीं लगता कि मॉडल के अंदर चयनकर्ता का उपयोग करना एक अच्छा विचार होगा)
सुबीन जैकब

15
@SubinJacob यदि आपको इसका उत्तर चाहिए तो आपको एक नया प्रश्न बनाना चाहिए। एक SelectList बनाना निश्चित रूप से ड्रॉपडलिस्ट बनाने के लिए जाने का तरीका है।
मिनीरोग्नोर्क

25
मुझे लगता है कि यह थोड़ा व्यक्तिपरक है। मजबूत टाइप किए गए मॉडल अच्छे हैं और यादा यादा हैं, लेकिन उन परिदृश्यों के लिए जहां आप जल्दी से देख रहे हैं और चल रहे हैं, व्यूबाग और एक जैसे नियंत्रक, व्यू, मॉडल, ऑटो मैपर से व्यूमॉडल, आदि की तुलना में जल्दी काम करते हैं
क्रेग ब्रेट

11
@Darin, आप इसे शुरू करने के लिए Microsoft को "दोष" क्यों देते हैं? यह सिर्फ डेवलपर्स को दिया गया एक उपकरण है। यदि आप जानते हैं कि आप क्या कर रहे हैं, तो आप इसका अधिकतम लाभ उठा सकते हैं। यदि आप इसे पसंद नहीं करते हैं या त्रुटियों की संभावना अधिक महसूस करते हैं, तो बस इसका उपयोग न करें। :)
बिलाल फजलानी

5
आप भाग और लेआउट के बीच डेटा कैसे पास करने का सुझाव देते हैं? जब वे पूरी तस्वीर नहीं देखते हैं तो लोग उन्हें दोषी मानते हैं। मुझे लगता है कि आपके पास हर जगह बेसकंट्रोलर और बेस व्यू मॉडल या स्थिर / एकल वस्तुएं हैं। लगता है कि, बेहतर है कि डेटा देखने का उपयोग करें और नौकरी के लिए गलत उपकरण का उपयोग करने के लिए खुद को दोष दें।
बार्ट कैलिक्सो

42

आंतरिक रूप से ViewBag गुण ViewData शब्दकोश में नाम / मूल्य जोड़े के रूप में संग्रहीत किए जाते हैं ।

नोट: MVC 3 के अधिकांश पूर्व-रिलीज़ संस्करणों में, ViewBag गुण को MVC 3 रिलीज़ नोट्स से इस स्निपेट में नोट किया गया ViewModel नाम दिया गया था:

(संपादित 10-8-12) यह सुझाव दिया गया था कि मैं इस जानकारी के स्रोत को पोस्ट करता हूं जिसे मैंने पोस्ट किया है, यहां स्रोत है: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4

MVC 2 नियंत्रक एक ViewData गुण का समर्थन करते हैं जो आपको एक देर से बाध्य शब्दकोश एपीआई का उपयोग करके डेटा को एक दृश्य टेम्पलेट में पास करने में सक्षम बनाता है। MVC 3 में, आप इसी उद्देश्य को पूरा करने के लिए ViewBag संपत्ति के साथ कुछ सरल सिंटैक्स का उपयोग कर सकते हैं। उदाहरण के लिए, ViewData ["संदेश"] = "पाठ" लिखने के बजाय, आप ViewBag.Message = "text" लिख सकते हैं। ViewBag संपत्ति का उपयोग करने के लिए आपको किसी भी दृढ़ता से टाइप की गई कक्षाओं को परिभाषित करने की आवश्यकता नहीं है। क्योंकि यह एक गतिशील संपत्ति है, आप इसके बजाय बस गुण प्राप्त कर सकते हैं या सेट कर सकते हैं और यह उन्हें गतिशील रूप से रन टाइम पर हल करेगा। आंतरिक रूप से, ViewBag गुणों को ViewData शब्दकोश में नाम / मूल्य जोड़े के रूप में संग्रहीत किया जाता है। (ध्यान दें: MVC 3 के अधिकांश पूर्व-रिलीज़ संस्करणों में, ViewBag संपत्ति को ViewModel संपत्ति का नाम दिया गया था।)


सवाल के बीच अंतर ViewDataऔर ViewBag, के बारे में नहीं पूछता है ViewModel
मैथ्यू फ्लेशेन

हेड-अप मैथ्यू फ्लैशेन के लिए धन्यवाद, मैंने प्रतिक्रिया में एक टाइपो लिया था और इसे ठीक कर दिया था, अब ViewModel के बजाय "ViewData" पढ़ता है जो एक गलती थी। :)
रिच बियान्को

अब यह गलत है। न ही दूसरे का नाम बदला गया था। वे दोनों अभी भी मौजूद हैं। एक है dynamicऔर समर्थन करता है ViewBag.Message। एक पुराने ViewData["Message"]वाक्यविन्यास का उपयोग करता है ।
मैथ्यू फ्लेशेन

1
+1 लेकिन, आप किस स्रोत से उद्धृत कर रहे हैं ...? वास्तव में एक लिंक प्रदान करना चाहिए।
सैम

1
सुझाव के लिए धन्यवाद सैम। मैंने मूल स्रोत के लिए एक लिंक जोड़ा है।
अमीर बियांको

34

MVC में ViewBag बनाम ViewData

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

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

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

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

ViewData ऑब्जेक्ट्स का एक शब्दकोश है जो ViewDataDictionary वर्ग से प्राप्त होता है और कुंजी के रूप में तार का उपयोग करके सुलभ होता है। ViewBag एक गतिशील संपत्ति है जो C # 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"]

7
आपका उत्तर इंगित करता है, typecastingलेकिन आपने यह नहीं दिखाया कि टाइपकास्टिंग कैसे किया जाता है
एलेक्स

31

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

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

निम्नलिखित उदाहरण पर विचार करें:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var emp = new Employee
        {
            EmpID=101,
            Name = "Deepak",
            Salary = 35000,
            Address = "Delhi"
        };

        ViewData["emp"] = emp;
        ViewBag.Employee = emp;

        return View(); 
    }
}

और कोड Viewइस प्रकार है:

@model MyProject.Models.EmpModel;
@{ 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
 ViewBag.Title = "Welcome to Home Page";
 var viewDataEmployee = ViewData["emp"] as Employee; //need type casting
}

<h2>Welcome to Home Page</h2>
This Year Best Employee is!
<h4>@ViewBag.Employee.Name</h4>
<h3>@viewDataEmployee.Name</h3>

6
मेरी मदद करो, लेकिन मुझे लगता है कि एक गलती है। इसे <h4>@ViewBag.emp.Name</h4> बदल देना चाहिए<h4>@ViewBag.Employee.Name</h4>
बेनी मार्गालिट

24

सभी उत्तरों से पता चलता है कि ViewBagऔर / या ViewDataउन आंकड़ों को पास Controllerकरना है Viewsजिनसे गलत सूचना है। दृश्य से लेआउट या आंशिक से दृश्य (या ViewCompords, आदि) तक डेटा पास करने के लिए दोनों बहुत उपयोगी हैं। यह नियंत्रक अनन्य नहीं है।

डिफ़ॉल्ट asp.net नमूने के रूप में लेआउट पृष्ठ में यह है:

<title>@ViewData["Title"] - MyApp</title>

और किसी भी दृश्य में

ViewData["Title"] = "Details";

तो, सवाल पूछने के लिए: "क्या अंतर है ViewBagऔर ViewData?"

सबसे उल्लेखनीय अंतर ViewDataएक मजबूत टाइप का शब्दकोश है जबकि ViewBagएक गतिशील प्रकार है।

ध्यान दें कि डेटा सम के अंदर है

ViewData["Title"] = "MyTitle";
ViewBag.Title; // returns "MyTitle";

एक या दूसरे का उपयोग कब करें?

  • ViewBagमान्य सी # नामों का समर्थन नहीं करता है। आप ViewData["Key With Space"]साथ नहीं पहुँच सकतेViewBag
  • ViewBag.Something डायनामिक है और आपको कॉलिंग मेथड्स (जैसे एक्सटेंशन मेथड्स) की समस्या हो सकती है, जिसे कंपाइल समय पर सटीक पैरामीटर पता होना चाहिए।
  • ViewBag नलियों के लिए जाँच कर सकते हैं सिंथेटिक क्लीनर: ViewBag.Person?.Name
  • ViewDataएक शब्दकोश के सभी गुण हैं ContainsKey, जैसे Add, आदि तो आप उपयोग कर सकते हैंViewData.Add("somekey", "somevalue") ध्यान रखें कि यह अपवाद फेंक सकता है।
  • ViewDataविचारों का उपयोग करते हुए टाइपकास्टिंग की आवश्यकता ViewBagनहीं है।

सूक्ष्म अंतरों को जानना, एक या दूसरे का उपयोग करना अधिक पसंद करने वाला स्वाद है।

आम तौर पर आप ViewBag.AnyKeyएक उपनाम के बारे में सोच सकते हैंViewData["AnyKey"]


14

क्या मैं आपको सलाह दे सकता हूं कि आप इसका इस्तेमाल न करें?

यदि आप अपनी स्क्रीन पर डेटा "भेजना" चाहते हैं, तो एक दृढ़ता से टाइप की गई वस्तु (AKA ViewModel) भेजें क्योंकि यह परीक्षण करना आसान है।

यदि आप किसी प्रकार के "मॉडल" से बंधते हैं और आपके पास यादृच्छिक "व्यूबैग" या "व्यूडेटा" आइटम हैं, तो यह स्वचालित परीक्षण को बहुत मुश्किल बना देता है।

यदि आप इन पर विचार कर रहे हैं कि आप कैसे पुनर्गठन कर सकते हैं और बस ViewModels का उपयोग कर सकते हैं।


4
"कंपाइलर पहली यूनिट टेस्ट है" को नजरअंदाज करते हुए प्रिंसिपल एक स्टेटिकली टाइप्ड व्यू मॉडल को आपके कोड को डायनामिक टाइप से ज्यादा टेस्टी कैसे बनाता है? जबकि गतिशील रूप से टाइप किए गए समाधान में परीक्षणों की आवश्यकता अधिक महत्वपूर्ण है, यदि दोनों समाधान एक ही संख्या को लागू करते हैं और परीक्षण के प्रकार आप कुछ भी नहीं खोते हैं।
डैरेन लुईस

मैं सहमत हूं, यह थोड़ा अस्पष्ट है। शायद अंतर्कलह शामिल है।
जोशुआ रामिरेज़

1
एक उदाहरण मज़ाक का होगा। यदि आप एक कंट्रोलर एक्शन का परीक्षण करना चाहते हैं, तो यह सुनिश्चित करना आसान है कि "मॉक" ऑब्जेक्ट को इधर-उधर से गुजरने की कोशिश की जाए और इसके बजाय यह दावा करने की कोशिश की जाए कि कुछ डिक्शनरी को कुछ डिक्शनरी में जोड़ा गया या किसी डायनेमिक फील्ड को कुछ वैल्यू पर सेट किया गया है - यह है एक से अधिक मापदंडों को लेने के बजाय एक "अनुरोध" और एक "रिस्पांस" ऑब्जेक्ट वाले सेवा अनुबंधों के लिए समान अवधारणा।
नॉट्नन

यदि आप या तो उपयोग नहीं कर रहे हैं तो आप व्यू से लेआउट तक डेटा कैसे पारित करेंगे? -1
बार्ट कैलिक्सो

यह कैसा उत्तर है?
JSON

11

कुछ सूक्ष्म अंतर हैं जिनका अर्थ है कि आप ViewData और ViewBag का उपयोग दृश्य से थोड़े अलग तरीके से कर सकते हैं। एक लाभ यह है इस पोस्ट में उल्लिखित है http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx और शो है कि कास्टिंग ViewData के बजाय ViewBag का उपयोग करके उदाहरण में टाला जा सकता है।


6

viewdata: व्यू और कंट्रोलर के बीच डेटा को स्टोर करने के लिए इस्तेमाल किया जाने वाला एक डिक्शनरी है, यू व्यू में ऑब्जेक्ट डेटा ऑब्जेक्ट को उसके संबंधित मॉडल में डालना है ताकि वह इससे डेटा रिकवर कर सके ...

ViewBag: दृश्य डेटा के लिए काम करने में समान एक गतिशील संपत्ति है, हालांकि यह बेहतर है cuz यह देखने में उपयोग करने से पहले अपने corresspolding मॉडल को डाली जाने की आवश्यकता नहीं है ...


4

नीचे ViewData, ViewBag, TempData और सत्र के बारे में बिंदु अंतर करने के लिए बिंदु है। क्रेडिट / कॉपी किया गया askforprogram.in , कोड उदाहरण के लिए लिंक का पालन करें जिसका मैंने यहां उल्लेख नहीं किया है।

  1. एमवीसी में ViewData

    • ViewData कंट्रोलरबेस क्लास की संपत्ति है।
    • ViewData एक प्रकार की शब्दकोष वस्तु है।
    • ViewData कुंजी-मूल्य शब्दकोश संग्रह है।
    • ViewData MVC 1.0 संस्करण में पेश किया गया था।
    • ViewData .Net फ्रेमवर्क 3.5 और इसके बाद के संस्करण के साथ काम करता है।
    • गणना करते समय कोड का प्रकार रूपांतरण करने की आवश्यकता है।
    • ViewData ऑब्जेक्ट केवल वर्तमान अनुरोध के लिए डेटा रखता है।
  2. MVC में ViewBag

    • ViewBag कंट्रोलरबेस क्लास की संपत्ति है।
    • ViewBag एक प्रकार की गतिशील वस्तु है।
    • ViewBag एक प्रकार की वस्तु है।
    • ViewBag को MVC 3.0 संस्करण में पेश किया गया था।
    • ViewBag .Net फ्रेमवर्क 4.0 और इसके बाद के संस्करण के साथ काम करता है।
    • ViewBag संपत्ति का उपयोग करता है और इसे संभालता है, इसलिए गणना करते समय टाइप रूपांतरण करने की कोई आवश्यकता नहीं है।
    • ViewBag ऑब्जेक्ट केवल वर्तमान अनुरोध के लिए डेटा रखता है।
  3. एमवीसी में टेंपडाटा

    • TempData कंट्रोलरबेस क्लास की संपत्ति है।
    • टेंपडाटा एक प्रकार का शब्दकोष है।
    • TempData कुंजी-मूल्य शब्दकोश संग्रह है।
    • TempData को MVC 1.0 संस्करण में पेश किया गया था।
    • TempData .Net फ्रेमवर्क 3.5 और इसके बाद के संस्करण के साथ काम करता है।
    • गणना करते समय कोड का प्रकार रूपांतरण करने की आवश्यकता है।
    • TempData ऑब्जेक्ट वर्तमान अनुरोध और बाद के अनुरोध के बीच डेटा के लिए उपयोग किया जाता है।
  4. एमवीसी में सत्र

    • सत्र नियंत्रक (अमूर्त वर्ग) की संपत्ति है।
    • सत्र एक प्रकार का HttpSessionStateBase है।
    • सत्र कुंजी-मूल्य शब्दकोश संग्रह है।
    • सत्र को MVC 1.0 संस्करण में पेश किया गया था।
    • TempData .Net फ्रेमवर्क 1.0 और इसके बाद के संस्करण के साथ काम करता है।
    • गणना करते समय कोड का प्रकार रूपांतरण करने की आवश्यकता है।
    • सत्र ऑब्जेक्ट सभी अनुरोधों के लिए डेटा रखता है। सभी अनुरोधों के लिए मान्य, कभी भी समाप्त नहीं होता है।

1

यद्यपि आपको एक प्रारूप को दूसरे पर चुनने का तकनीकी लाभ नहीं हो सकता है, आपको दो वाक्यविन्यासों के बीच कुछ महत्वपूर्ण अंतरों के बारे में पता होना चाहिए। एक स्पष्ट अंतर यह है कि ViewBag केवल तभी काम करता है जब आप जिस कुंजी तक पहुंच रहे हैं वह एक मान्य C # आइडेंटी एर है। उदाहरण के लिए, यदि आप ViewData ["Key With Spaces"] में कोई मान रखते हैं, तो आप उस मान को ViewBag का उपयोग करके एक्सेस नहीं कर सकते क्योंकि कोड संकलित नहीं होगा। विचार करने के लिए एक और महत्वपूर्ण मुद्दा यह है कि आप डायनामिक मानों में विस्तार के तरीकों के मापदंडों के रूप में पारित नहीं कर सकते। C # संकलक को सही विस्तार विधि का चयन करने के लिए संकलन समय पर प्रत्येक पैरामीटर का वास्तविक प्रकार जानना चाहिए। यदि कोई पैरामीटर गतिशील है, तो संकलन विफल हो जाएगा। उदाहरण के लिए, यह कोड हमेशा विफल रहेगा: @ Html.TextBox ("name", ViewBag.Name)। इसके आसपास काम करने के लिए, या तो ViewData ["नाम" का उपयोग करें


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

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

In View:

@ViewBag.Name 
@ViewData["Name"] 

0

इस तरह हम इसे TEMP DATA के साथ नियंत्रक के बीच की जानकारी को दूसरे पेज पर जाने के लिए मान का उपयोग कर सकते हैं


0

ViewData और ViewBag के बीच एक मुख्य अंतर मैंने देखा है:

ViewData: यह वस्तु वापस कर देगा कोई फर्क नहीं पड़ता कि आपने इसमें क्या सौंपा है और फिर से मूल प्रकार से टाइपकास्ट करने की आवश्यकता है।

ViewBag: यह सटीक प्रकार वापस करने के लिए पर्याप्त स्मार्ट है जिसे आपने इसे सौंपा है यह कोई फर्क नहीं पड़ता है कि आपने साधारण प्रकार (यानी इंट, स्ट्रिंग आदि) या जटिल प्रकार को सौंपा है।

Ex: नियंत्रक कोड।

 namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Products p1 = new Products();
            p1.productId = 101;
            p1.productName = "Phone";
            Products p2 = new Products();
            p2.productId = 102;
            p2.productName = "laptop";

            List<Products> products = new List<Products>();
            products.Add(p1);
            products.Add(p2);
            ViewBag.Countries = products;
            return View();
        }
    }
    public class Products
    {
        public int productId { get; set; }
        public string productName { get; set; }
    }
}

कोड देखें।

<ul>
            @foreach (WebApplication1.Controllers.Products item in ViewBag.Countries)
            {
            <li>@item.productId &nbsp;&nbsp;&nbsp;@item.productName</li>
            }
        </ul>

आउटपुट स्क्रीन।

यहां छवि विवरण दर्ज करें


0

डेटा देखें

  1. ViewData का उपयोग कंट्रोलर से डेटा को देखने के लिए किया जाता है
  2. ViewData, ViewDataDictionary वर्ग से ली गई है और मूल रूप से एक शब्दकोश वस्तु है ।Keys और मान जहाँ कुंजियाँ स्ट्रिंग हैं, जबकि मान ऑब्जेक्ट होंगे।
  3. ऑब्जेक्ट प्रकार के डेटा की वजह से ViewData से डेटा पुनर्प्राप्त करते समय डेटा टाइपकास्टिंग की आवश्यकता होती है और साथ ही यह भी कि वे अनुप्रयोग को तोड़ देंगे, अन्यथा टाइपिंग के लिए नल vvalue चेक करें। यदि पुनर्निर्देशन होता है, तो इसका मान शून्य हो जाता है पढ़ें TempData ViewData और View Bag के बीच पूर्ण अंतर

http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html


0
ViewData
  1. ViewData का उपयोग कंट्रोलर से डेटा को देखने के लिए किया जाता है
  2. यह ViewDataDictionary वर्ग से ली गई है
  3. यह केवल वर्तमान अनुरोध के लिए उपलब्ध है
  4. त्रुटि से बचने के लिए जटिल डेटा प्रकार और अशक्त मूल्यों के लिए जाँच के लिए टाइपकास्टिंग की आवश्यकता होती है
  5. यदि पुनर्निर्देशन होता है, तो इसका मूल्य शून्य हो जाता है
ViewBag
  1. ViewBag का उपयोग कंट्रोलर से संबंधित दृश्य में डेटा पास करने के लिए भी किया जाता है
  2. ViewBag एक गतिशील संपत्ति है जो C # 4.0 में नई गतिशील सुविधाओं का लाभ उठाती है
  3. यह केवल वर्तमान अनुरोध के लिए भी उपलब्ध है
  4. यदि पुनर्निर्देशन होता है, तो इसका मूल्य शून्य हो जाता है
  5. जटिल डेटा प्रकार के लिए टाइपकास्टिंग की आवश्यकता नहीं है

0

यहां ViewData और ViewBag दोनों का उपयोग कंट्रोलर से व्यू तक के पास डेटा के लिए किया जाता है ।

1. दृश्यदा

- ViewData डिक्शनरी ऑब्जेक्ट है जो ViewDataDictonary वर्ग से लिया गया है ।

- डेटा केवल एक अनुरोध के लिए अनुमति देता है, पेज रीडायरेक्ट होने पर ViewData मान साफ़ हो जाते हैं।

- उपयोग करने से पहले ViewData मान को टाइप किया जाना चाहिए।

उदाहरण: नियंत्रक में

public ActionResult PassingDatatoViewWithViewData()
{
      ViewData["Message"] = "This message shown in view with the ViewData";
      return View();
}

दृश्य में

@ViewData["Message"];

- ViewData कुंजी और मूल्य की तरह एक जोड़ी है , संदेश कुंजी है और उलटा अल्पविराम मूल्य मान है।

- डेटा सरल है इसलिए हम यहां टाइपकास्टिंग का उपयोग नहीं कर सकते हैं यदि डेटा जटिल है तो टाइप कास्टिंग का उपयोग करें।

public ActionResult PassingDatatoViewWithViewData()
{
      var type= new List<string>
    {
        "MVC",
        "MVP",
        "MVVC"
    };
    ViewData["types"] = type;
    return View();
}

- दृश्य में डेटा के रूप में निकाला जा सकता है

<ul>
        @foreach (var items in (List<string>)ViewData["types"])
        {
         <li>@items</li>
        }
  </ul>

2. दृश्यबाग

- व्यूबग डायनेमिक फीचर का उपयोग करता है। व्यूडाटा के आसपास विजुअल रैपर।

- व्यूबैग प्रकार में कास्टिंग आवश्यक है।

- ViewData के रूप में ही, अगर पुनर्निर्देशन होता है मूल्य शून्य हो जाता है।

उदाहरण:

public ActionResult PassingDatatoViewWithViewBag()
{
          ViewData.Message = "This message shown in view with the ViewBag";
          return View();
}

दृश्य में

@ViewBag.vbMessage

- के लिए जटिल प्रकार ViewBag का उपयोग करें

public ActionResult PassingDatatoViewWithViewBag()
{
          var type= new List<string>
        {
            "MVC",
            "MVP",
            "MVVC"
        };
        ViewBag.types = type;
        return View();
 }

- दृश्य में डेटा के रूप में निकाला जा सकता है

<ul>
       @foreach (var items in ViewBag.types)
       {
         <li>@items</li>
       }
</ul>

- मुख्य अंतर यह है कि ViewBag को टाइपकास्टिंग की आवश्यकता नहीं है, लेकिन ViewData को टाइपकास्टिंग की आवश्यकता है।


-1

ViewBag और ViewData, ASP.Net MVC में देखने के लिए कंट्रोलर से जानकारी पास करने के लिए उपयोग किए जाने वाले दो साधन हैं। दोनों तंत्र का उपयोग करने का लक्ष्य नियंत्रक और दृश्य के बीच कम्युनिकेटन प्रदान करना है। दोनों का छोटा जीवन है जो पुनर्निर्देशन के घटने के बाद दोनों का मूल्य शून्य हो जाता है अर्थात, एक बार जब पृष्ठ स्रोत पृष्ठ से अनुप्रेषित हो जाता है (जहाँ हम ViewBag या ViewData का मान सेट करते हैं) तो लक्ष्य पृष्ठ, ViewDag दोनों के साथ ही ViewData अशक्त हो जाता है।

इन दोनों समानताओं के होने के बावजूद (ViewBag और ViewData) दो अलग चीजें हैं अगर हम दोनों के कार्यान्वयन के बारे में बात करते हैं। अंतर इस प्रकार हैं:

1.) यदि हम दोनों कार्यान्वयन वार का विश्लेषण करते हैं, तो हम पाएंगे कि ViewData एक डिक्शनरी डेटा संरचना है - व्यूडेटा से प्राप्त वस्तुओं का शब्दकोश और इन मूल्यों के लिए कुंजी के रूप में स्ट्रिंग्स का उपयोग करके पहुंच योग्य है, जबकि व्यूबाग सी / 4.0 में पेश किए गए गतिशील सुविधाओं का उपयोग करता है। एक गतिशील संपत्ति है।

2.) व्यूडेट फॉर्म को एक्सेस करने के दौरान, हमें वैल्यूज (डेटाटाइप्स) टाइप करने की जरूरत है क्योंकि वे व्यूडाटा डिक्शनरी में ऑब्जेक्ट्स के रूप में स्टोर किए जाते हैं, लेकिन व्यूबाग के मामले में वें वैल्यू एक्सेस कर रहे हैं तो ऐसी कोई जरूरत नहीं है।

3.) ViewBag में हम इस तरह से मान सेट कर सकते हैं:

      ViewBag.Name = "Value"; 

और निम्नानुसार उपयोग कर सकते हैं:

          @ViewBag.Name

ViewData के मामले में मान निम्नानुसार सेट और एक्सेस किए जा सकते हैं: ViewData को निम्नानुसार सेट करना:

ViewData["Name"] = "Value";

और इस तरह से पहुँच मूल्य

 @ViewData["Name"] 

अधिक जानकारी के लिए यहां क्लिक करें:


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