ViewData ऑब्जेक्ट्स का एक डिक्शनरी है जिसे स्ट्रिंग्स को कुंजी के रूप में उपयोग करके स्टोर और रिट्रीव किया जाता है। इसका उपयोग कंट्रोलर से व्यू में डेटा ट्रांसफर करने के लिए किया जाता है। चूंकि ViewData एक डिक्शनरी है, इसमें की-वैल्यू पेयर्स होते हैं जहां प्रत्येक कुंजी एक स्ट्रिंग होनी चाहिए। ViewData केवल कंट्रोलर से व्यू में डेटा ट्रांसफर करता है, इसके विपरीत नहीं। यह केवल वर्तमान रिक्वेस्ट के दौरान वैध होता है।
ViewData में डेटा स्टोर करना
ViewData["countries"] = countriesList;
ViewData से डेटा रिट्रीव करना
string country = ViewData["MyCountry"].ToString();
चेतावनी: ViewData कंपाइल-टाइम एरर चेकिंग प्रदान नहीं करता। उदाहरण के लिए, अगर हम कुंजी नामों की गलत स्पेलिंग करते हैं, तो हमें कोई कंपाइल-टाइम एरर नहीं मिलेगा। हमें एरर के बारे में केवल रनटाइम पर पता चलेगा।
उदाहरण: कंट्रोलर
using System.Collections.Generic;
using System.Web.Mvc;
namespace DemoMvcApplication.Controllers
{
public class HomeController : Controller
{
public ViewResult Index()
{
ViewData["Countries"] = new List
{
"India",
"Malaysia",
"Dubai",
"USA",
"UK"
};
return View();
}
}
}
उदाहरण: व्यू (Index.cshtml)
@{
ViewBag.Title = "Countries List";
}
Countries List
@foreach (string country in (List)ViewData["Countries"])
{
- @country
}
आउटपुट

ViewData के महत्वपूर्ण गुण
| विशेषता | विवरण |
|---|---|
| टाइप | ViewDataDictionary (IDictionary<string, object> इम्प्लीमेंट करता है) |
| स्कोप | केवल वर्तमान रिक्वेस्ट |
| दिशा | कंट्रोलर → व्यू (वन-वे) |
| टाइप सेफ्टी | कोई नहीं - रनटाइम पर कास्टिंग आवश्यक |
| कुंजी केस-सेंसिटिविटी | केस-इनसेंसिटिव |
ViewData vs ViewBag vs TempData
| विशेषता | ViewData | ViewBag | TempData |
|---|---|---|---|
| टाइप | डिक्शनरी | डायनामिक | डिक्शनरी (सेशन-बैक्ड) |
| सिंटैक्स | ViewData["key"] | ViewBag.Key | TempData["key"] |
| लाइफटाइम | वर्तमान रिक्वेस्ट | वर्तमान रिक्वेस्ट | अगली रिक्वेस्ट तक (रीडायरेक्ट के बाद भी) |
| टाइप सेफ्टी | कमजोर | कमजोर | कमजोर |
| सीरियलाइजेशन | नहीं | नहीं | हां (सेशन में स्टोर) |
सर्वोत्तम अभ्यास
- स्ट्रॉन्गली-टाइप्ड व्यू मॉडल्स प्राथमिकता दें - ViewData/ViewBag के बजाय
- केवल सरल, अस्थायी डेटा के लिए ViewData का उपयोग करें
- कुंजी नामों के लिए कॉन्स्टेंट्स/स्ट्रिंग कॉन्स्टेंट्स का उपयोग करें टाइपो से बचने के लिए
- कास्टिंग से पहले नल चेक करें
बेहतर दृष्टिकोण: व्यू मॉडल
// ViewModel
public class CountryViewModel
{
public List Countries { get; set; }
public string SelectedCountry { get; set; }
}
// Controller
public ViewResult Index()
{
var model = new CountryViewModel
{
Countries = new List { "India", "Malaysia", "Dubai", "USA", "UK" }
};
return View(model); // स्ट्रॉन्गली टाइप्ड
}
// View (@model CountryViewModel)
@model CountryViewModel
Countries List
@foreach (var country in Model.Countries)
{
- @country
}
ViewData के साथ नल-सुरक्षित एक्सेस
// व्यू में सुरक्षित एक्सेस
@{
var countries = ViewData["Countries"] as List ?? new List();
}
@foreach (var country in countries)
{
- @country
}
// या व्यू में एक्सटेंशन मेथड
@Html.ViewDataList("Countries")