الفرق بين الـ ViewData والـ ViewBag والـ TempData في الـ ASP.NET MVC

07 مايو 2017     319 مشاهدة    0 تعليق
تم النشر في #MVC 

بعد غياب استمر لشهر عدنا من جديد وموضوع أخر وشيق بإذن الله. أحببت التطرق في مقال اليوم عن طرق تمرير البيانات بين الـ Controller والـ View في الـ MVC.

أتاحت تقنية الـ ASP.NET MVC ثلاث طرق أساسية لتمرير البيانات بين الـ Controller والـ View, فيمكن للبعض منا أن استخدم احدى هذه الوسائل, ولكن الكثير قد لايدرك اهميه كل نوع وماهو الاستخدام الامثل له, لذا سأوجز الفرق بين هذه الطرق كالتالي:

ViewData

هي خاصيه من نوع ViewDataDictionary تسمح بنقل البيانات من الـ Controller إلى الـ View الخاص به, وتظل القيمة موجود خلال الطلب الحالي, وعند حدوث أي إعادة توجيه للصفحه تصبح القيمة null.

للحصول على القيمة الموجودة داخل الكائن ViewData نتضطر لعمل Casting للنوع المراد التحويل إليه.

// Write
ViewData["PromoCode"] = "H27";

// Read
var promoCode = ViewData["PromoCode"].ToString();

ViewBag

هي خاصية ديناميكية, إستخدمت مفهوم الـ dynamic الموجود في الدوت نت 4, ببساطه الـ ViewBag ماهي إلا عن إلتفاف حول الـ ViewData ولكن ميزتها أنها لا تتطلب أي عمليات تحويل للأنواع Casting للحصول على القيم.

// Write
ViewBag.PromoCode = "H27";

// Read
var promoCode = ViewBag.PromoCode;

TempData

هي خاصية من نوع TempDataDictionary تسمح بنقل البيانات من الطلب الحالي إلى الطلب اللاحق, بمعنى آخر إعادة التوجيه من صفحه إلى أخرى. يتم الإحتفاظ بالقيمة في الـ TempData إلى أن يتم تحميل الـ View, وغالباً تستخدم في حفظ رسائل الأخطاء أو رسائل التحقق.

للحصول على القيمة الموجودة داخل الكائن TempData نضطر لعمل Casting للنوع المراد التحويل إليه.

// Write
TempData["Message"] = "The email sent successfully";

// Read
var message = TempData["Message"].ToString();

أرجو أن يكون الفرق واضح بين كل الطرق, والجدير بالذكر أنه يمكن إستخدام الكائن Session إذا أردت حفظ البيانات اثناء وقت الجلسه, لأنه مثلما ذكرت سابقاً لايمكن للخاصيه TempData الإحتفاظ بالبيانات لوقت أطول.

تويتر فيسبوك قوقل + لينكد إن


اكتب تعليقك