بررسی دو شئ ViewBag و ViewData در MVC

ViewBag و ViewData

این مبحث درباره ی دو شئ View است که برای پاس دادن داده ها از یک کنترلر به یک view استفاده میشوند.

مورد استفاده ی این اشیای View نیز در MVC است ، در این مقاله به طور کامل و به صورت قدم به قدم چگونگی کار با آن ها به همراه تصاویر و نحوه ی استفاده ی بهینه و کاربرد کلی آن ها را شرح میدهیم.

ViewBag و ViewData برای پاس دادن داده ها از یک کنترلر به view استفاده میشوند.

حال اجازه دهید که هردوی آنها را تک تک مشاهده کنیم :

برسی کامل ViewBag و ViewData

ViewBag

ViewBag از ویژگی های پویا برای افزودن ویژگی خاص استفاده میشود که در C# ورژن ۴.۰ معرفی شد.

نسخه ی نمایشی

یک پروژه جدید ASP.NET MVC بسازید و قالب آن را خالی و موتور مشاهده آن را تیغ (Razor) بگذارید.

بر روی تایید کلیک کنید.

ViewBag و ViewData

این کار یک پروژه خالی جدید برای ما میسازد.

به صفحه ی جستجوی راه حل (Solution Explorer) بروید و بر روی فولدر کنترلر راست کلیک کنید و سپس گزینه ی افزودن -> کنترلر کلیک کنید.

ViewBag و ViewData

کنترلر را به HomeController تغییر دهید و قالب کنترلر MVC خالی را انتخاب کنید :

ViewBag و ViewData

گزینه افزودن را انتخاب نمایید.

HomeController ما ساخته شد.

ViewBag و ViewData

حال بیایبد تعدادی کد در داخل متد Index Action بنویسیم :

ViewBag و ViewData

زمانیکه ما میگوییم ViewBag(.),

در این ViewBag ما میتوانیم هر داده ی پویایی را که میخواهیم پاس بدهیم و این داده مانند یک ویژگی پویا رفتار میکند.

ما نام برند داده ی پویا را به آن اضافه میکنیم :

ViewBag و ViewData

ما یک لیستی از اشیای جدیدی ساختیم که در آن ۵ شئ با ارزش رشته را قرار دادیم و داده را به ViewBag.BrandName اختصاص میدهیم و در انتها مقدار View را بازمیگردانیم.

برنامه را ذخیره و اجرا کنید.

ViewBag و ViewData

با یک خطای استثنا رو به رو میشویم زیرا ما داریم مقدار View را به جایی که هنوز نساختیم برمیگردانیم و از آنجایی که این یک متد Index Action میباشد ما یک View با همین ,Indexنام بسازید.

اما قبل از اینکه اقدامی کنیم ابتدا ببینیم که تابع View در واقع چه چیزی را بازمیگرداند.

ViewBag و ViewData

نوع بازگشتی تابع View یک ViewResult میباشد اما متد Index Action به ما ActionResult برمیگرداند.

پس چرا برنامه اروری نمیدهد ؟

با فشردن دکمه F12 یا راست کلیک بر روی تابع View و انتخاب , به مقصد تابع View بروید.

ابتدا شما خواهید دید که تابع View , ViewResult را برمیگرداند.

ViewBag و ViewData

اگر شما به مقصد ViewResult بروید میتوانید ببینید که این کلاس از کلاس ViewResultBase ارث بری میکند.

ViewBag و ViewData

و حال اگر شما به مقصد ViewResultBase بروید میتوانید ببینید که این کلاس از کلاس ActionResult ارث بری میکند.

ViewBag و ViewData

این دلیلی است که ما میتوانیم از نوع برگشتی ActionResult با وجود نوع برگشتی تابع ViewResult باشد , استفاده کنیم.

بیایید یک Index View بیافزاییم

ViewBag و ViewData

دکمه ی افزودن را کلیک کنید.

فایل Index.cshtml ما در داخل فولدر Views ساخته خواهد شد.

ViewBag و ViewData

در داخل تگ div ما یک un-orderedhplhri میسازیم:

•  <ul>

•  </ul>

در گام بعدی ما باید در میان BrandeName ها حلقه بزنیم و به کد زیر برای حلقه foreach استفاده میشود:

 ViewData در MVC

در موتور Razor View اگر شما بخواهید که از HTML به C# تغییر کد دهید و سپس از “@” استفاده کنید، ما میان هر رشته ی اشیای موجود در ViewBag.BrandName با ویژگی پویا حلقه میزنیم.

ViewBag و ViewData

اکنون ما همه ی داده ها را در آیتمی که از ویژگی ViewBag.BrandName دریافت کردیم , داریم.

گام بعدی برای افزودن و نمایش این آیتم ها به فرم یک لیست میباشد و برای اینکار میتوانیم از <li> </li> استفاده کنیم:

ViewBag و ViewData

برنامه را اجرا کنید.

 ViewData در MVC

ما با موفقیت داده ها را از یک کنترلر به View با استفاده از ViewBag.DynamicData پاس دادیم

حال بیاید ببینیم چگونه همین کار را با استفاده از ViewData اجرا کنیم.

ViewBag و ViewData

ViewData یک دیکشنری اشیا است که رشته ها را مانند کلید ذخیره و بازیابی میکند.

ViewBag و ViewData

کلید را به عنوان “BrandName” پاس دهید .

 ViewBag در MVC

ما کلید Indexed string ها را در ViewData پاس داده ایم جایی که لیست جدید اشیا را ذخیره میکنیم.

در Index View ما نیاز به کمی تغییرات داریم.

حال ما احتیاج داریم که برای هر [ViewData[BrandName] , حلقه ایجاد کنیم.

ViewBag و ViewData

برنامه را ذخیره و راه اندازی کنید.

زمانی که ما برنامه را اجرا میکنیم یک خطای کامپایل دریافت میکنیم زیرا ما نوع قالبی ViewData را به درستی انتخاب نکرده ایم.

در حال حاضر  ViewData  , شئ ViewDataDictionary را برمیگرداند.

 ViewBag در MVC

تا آنجایی که ما میدانیم این ViewData داده هایی با نوع رشته را ذخیره میکند.

پس برای دریافت آن رشته ها , ما باید نوع قالبی آن را به لیست <string> تغییر دهیم :

ViewBag و ViewData

برنامه را اجرا کنید :

ViewBag و ViewData

حال ما هردو راه پاس دادن داده ها از کنترلر به View را مشاهده کردیم.

اما برخی چیز ها در هردوی آنها یکسان است.

هردوی ViewData و ViewBag چک خطا در زمان کامپایل ارائه نمیدهند.

بنابراین اگر ما املای غلطی برای کلمات و کلید ها بکار ببریم به ما خطای کامپایلی نشان داده نمیشود.

خطا را تنها در زمان اجرا میتوان دید.

در اینجا من BrandName را به BrandNames تغییر میدهم.

 آموزش اشیا View

اگر ما این برنامه را بسازیم هیچ خطایی دریافت نمیکنیم اما زمانی که برنامه را اجرا کنیم با خطا مواجه میشویم.

 آموزش اشیا View

به همین علت بهتر است که تمرین هایی مبنی بر صحیح نوشتن کلمات در Views همانطور که در بحث پیشین درباره ی سری های MVC داشتیم انجام دهید.

با تشکر

داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    عباس آریان پور پاسخ

    بسیار خوووب : )

    محمد احسان حیدری پاسخ

    مرسی و ممنون از آموزشتون

جشنواره فروش ویژه عید تا عید با تخفیف های باورنکردنی در ام اس پی سافتبزن بریم
+