
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
آموزش ViewData در ASP.Net MVC
آموزش مفهوم ViewData در ASP.Net MVC :
ViewData بسیار شبیه ViewBag می باشد. از ViewData، برای انتقال اطلاعات از Controller به view استفاده می شود.
به بیان دیگر، ViewData یک مجموعه اطلاعات است که می توان شامل چندین جفت مقدار/ کلید یا (value-key) بوده و در آن key حتما بایستی متنی (string) باشد.
دیاگرام زیر، نحوه استفاده و کار ViewData را نشان می دهد :

ViewData فقط اطلاعات را از کنترلر به View ارسال می کند و نه برعکس. ViewData فقط در زمان درخواست جاری، فعال و معتبر خواهد بود.
در کد مثال عملی زیر، نحوه ارسال اطلاعات از کنترلر به View را با استفاده از ViewData نشان داده ایم :
public ActionResult Index() { IList<student> studentList = new List<student>(); studentList.Add(new Student(){ StudentName = "Bill" }); studentList.Add(new Student(){ StudentName = "Steve" }); studentList.Add(new Student(){ StudentName = "Ram" }); ViewData["students"] = studentList; return View(); }
در کد مثال عملی فوق، یک لیست دانش آموزان (Student list) را با کلید (key) به نام “student” در ViewData تعریف کرده ایم. بنابراین، می توان همانند کد زیر به Student list در view دسترسی پیدا کرد :
<ul> @foreach (var std in ViewData["students"] as IList<student>) { <li> @std.StudentName </li> } </ul>
حتما توجه داشته باشید که بایستی مقادیر ViewData Values را به نوع داده ای متناسب با آن، تبدیل نمایید.
همچنین، می تواید همانند کد مثال عملی زیر، یک جفت مقدار / کلید (keyValuePair) را در viewData، اضافه کنید :
public ActionResult Index() { ViewData.Add("Id", 1); ViewData.Add(new KeyValuePair<string, object>("Name", "Bill")); ViewData.Add(new KeyValuePair<string, object>("Age", 20)); return View(); }
ViewData و ViewBag به صورت درونی، از یک dictionary مشترک استفاده می کنند. بنابراین نمی توانید کلیدهای هم نام در ViewData با متغیرهای ViewBag داشته باشید، که در غیر این صورت، خطای runtime رخ می دهد.
public ActionResult Index() { ViewBag.Id = 1; ViewData.Add("Id", 1); // throw runtime exception as it already has "Id" key ViewData.Add(new KeyValuePair<string, object>("Name", "Bill")); ViewData.Add(new KeyValuePair<string, object>("Age", 20)); return View(); }
- ViewData اطلاعات را از کنترلر به View ارسال می کند و نه برعکس.
- ViewData از کلاس ViewDataDictionary مشتق شده است، بنابراین یک نوع Dictionary است.
- چرخه حیات ViewData، فقط درخواست جاری Http معتبر خواهد بود. مقادیر ViewData Values در صورت اجرای درخواست معکوس، پاک خواهند شد.
- بایستی قبل از استفاده از ViewData، آن را به نوع داده ای مناسب، تبدیل کنید.
- viewBag به صورت داخلی، اطلاعات خود را در ViewData Dictionary وارد می کند. بنابراین نام کلید (key) در ViewData نباید با نام خاصیت (property) در ViewBag، یکسان باشند.