با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش ASP.NET MVC ، را دنبال می کنند. عملکرد ویژگی ViewData شبیه به ویژگی ViewBag است. این ویژگی در انتقال اطلاعات از کنترلر به View مفید است. ViewData یک دایرکتوری است که می تواند شامل جفت های کلیدی و ارزش باشد که هر کلید باید یک رشته باشد. برای آشنایی بیشتر با ویژگی ViewData در ASP.NET MVC در ادامه ی مباحث فوق با ما همراه باشید.
در این آموزش شما را با عملکرد ویژگی ViewData در ASP.NET MVC و کاربردهای آن آشنا خواهیم کرد.
شکل زیر یک شمای کلی از کاربرد ویژگی ViewData در ASP.NET MVC را نشان می دهد.
نکته :ViewData تنها اطلاعات را از کنترلر به نمای View انتقال می دهد و این فقط در طول درخواست جاری معتبر خواهد بود.
مثال زیر نشان می دهد که چگونه داده ها را از کنترلر به نمای View با استفاده از ViewData انتقال دهید:
1 2 3 4 5 6 7 8 9 10 11 | 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 را با کلمه ی کلیدی “students” در دایرکتوری ViewData اضافه می کنیم.
بنابراین حالا لیست student می تواند به نمای view دسترسی داشته باشد:
1 2 3 4 5 6 7 8 | <ul> @foreach (var std in ViewData["students"] as IList<Student>) { <li> @std.StudentName </li> } </ul> |
لطفا توجه داشته باشید که ما باید مقادیر ViewData را به نوع داده مناسب ارسال کنیم.
همچنین شما می توانید یک KeyValuePair را در ViewData مانند کد زیر اضافه کنید :
1 2 3 4 5 6 7 8 | 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 از دایرکتوری های مشابه داخلی استفاده می کند.
بنابراین شما نمی توانید یک کلید منطبق ViewData با نام ویژگی ViewBag داشته باشید.
مثال- ViewBag و ViewData :
1 2 3 4 5 6 7 8 9 10 | 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 مشتق شده است که یک نوع دایرکتوری است.
۳- مدت اعتبار ViewData طول می کشد. اما در طول درخواست HTTP فعلی. اگر تغییر مسیر رخ دهد، مقادیر ViewData پاک خواهند شد.
۴- نوع مقدار ViewData باید قبل از استفاده مشخص شده باشد.
۵- ViewBag داخلی داده ها را در دیکشنری ViewData درج می کند. بنابراین کلید ViewData و ویژگی ViewBag نباید مطابقت داشته باشد.
همانطور که در مباحث فوق نیز اشاره شد عملکرد ویژگی ViewData در ASP.NET MVC مشابه ویژگی ViewBag است که در بخش قبلی نیز به آن پرداخته بودیم. در بخش بعدی به بررسی ویژگی TempData خواهیم پرداخت.