برای ارسال اطلاعات از Controller به View علاوه بر روش های ViewBag و ViewData یک روش دیگری نیز در ASP.Net core به نام TempData وجود دارد. البته با وجود روش های ViewBag و ViewData کمتر از TempData برای ارسال اطلاعات از Controller به View استفاده می شود.
در ASP.Net Core ما از TempData بیشتر برای ارسال اطلاعات از یک Controller به Controller دیگر استفاده می کنیم و از ViewBag و ViewData برای ارسال اطلاعات از controller به View استفاده می کنیم، چون این دو روش توانایی انتقال اطلاعات ار یک Controller به Controller دیگر را ندارند.
در تصویر زیر شما نحوه انتقال اطلاعات توسط ویژگی TempData را می بینید:
همانطور که در تصویر بالا می بینید، در اولین درخواست ما مقدار موردنظر خود را ("test") در یک پراپرتی TempData در متد Index() قرار می دهیم. در درخواست دوم به داده های خود که در پراپرتی TempData متد Index() ذخیره کردیم، دسترسی پیدا می کنیم. اما در درخواست سوم همانطور که در تصویر می بینید نمی توانیم به اطلاعات ذخیره شده خود در پراپرتی TempData دسترسی داشته باشیم، زیرا محتویات TempData بعد از درخواست دوم از بین می رود.
ویژگی TempData در ASP.NET Core MVC زمانی مفید خواهد بود که شما بخواهید اطلاعاتی را از یک متد به متد دیگر از یک یا چند Controller انتقال دهید. این ویژگی از دایرکتوری TempDataDictionary گرفته شده است.
در مثال زیر ما حالت اول را که انتقال اطلاعات بین دو Action Method در یک کنترلر است را پیاده سازی می کنیم. در حالت اول در اکشن Index با استفاده از TempData یک مقدار را دورن پراپرتی SiteName نگهداری می کنیم و در اکشن Display با استفاده از ViewBag مقدار را دریافت می کنیم.
اکنون مقدار موجود در پراپرتی Message اکشن متد Display را در View مربوط به اکشن Display به صورت زیر دریافت می کنیم.
خروجی مثال بالا به شکل زیر خواهد بود:
حالت دوم انتقال اطلاعات از Action Method یک کنترلر به Action Method یک کنترلر دیگر است. برای این منظور کنترلر Home را به شکل زیر تغییر می دهیم:
همانطور که در اکشن Dispaly می بینید ما از متدی به نام Keep استفاده کرده ایم. این متد مقدار پراپرتی موردنظر ما را در حافظه ذخیره می کند.
حال کنترلر دیگری با نام Article را ایجاد می کنیم و درون اکشن متد Index آن دستورات زیر را می نویسیم:
در گام بعدی View ای برای اکشن متد Index ایجاد می کنیم و دستور زیر را جهت دریافت مقدار SiteName می نویسیم:
اکنون اگر برنامه را اجرا کنیم خیلی راحت به مقدار پراپرتی SiteName که در کنترلر Home ایجاد شده بود دسترسی داریم.