پارسا صفوی
برنامه نویس وب

آموزش پاس دادن چند نوع داده به یک View در ASP.NET MVC

چگونه بهترین راه را برای پاس دادن چند نوع داده (Model) به View انتخاب کنیم. داخل این مقاله ما راجع به چگونگی انتخاب مناسب ترین راه برای پاس دادن چند نوع از Data به View صحبت خواهیم کرد. ما می توانیم از شش روش زیر برای این کار استفاده کنیم:

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
  1. استفاده از کلاس های ViewModel
  2. استفاده از قابلیت Patial View
  3. استفاده از کلاس Tuple
  4. استفاده از پراپرتی ViewData
  5. پاس دادن با ViewBag
  6. استفاده از پراپرتی TempData

امکان اشتباه در انتخاب راه مناسب سناریوی موجود زیاد است پس این کار باید با وسواس و دقت انجام شود.

بررسی اجمالی روش ها

شش راه نام برده شده نکات خوب و بد خود را دارند و انتخاب درست هر کدام از این راه ها بر اساس سناریو جای بحث بسیار دارد. قبل از هر تصمیمی ما نیاز به شناسایی(نکات خوب و بد) این روش ها داریم تا در نهایت بتوانیم بهترین روش را برای پروژه ی خود انتخاب کنیم.توجه داشته باشید که یک Application در مواقع خواص می تواند به طور همزمان از چند تا از روش های بالا بهره ببرد.

استفاده از ViewModel

ViewModel یک الگو است که به ما اجازه می دهد چند نوع Data مختلف را داخل یک کلاس داشته باشیم. کلاس ViewModel نباید دارای Method باشد و تنها باید مجموعه ای از پراپرتی های مورد نیاز شما باشد.این روش گسترده ترین روش برای پاس دادن چند نوع Data به یک View است و می تواند راه مطمینی برای این کار باشد. از نکات مثبت این روش می توان Intellisense بسیار خوب Visual Studio برای این کار ، ایمن بودن و انعطاف پذیری بالا را نام برد.

استفاده از Partial View

Partial View ها View های وابسته هستند که می توانند داخل View های دیگر استفاده شوند. در مواقعی که شما می خواهید در بعضی از صفحات قسمتی را نمایش دهید آن را در یک View جدا از نوع Partial View قرار می دهید تا همیشه به آن دسترسی داشته باشید.این روش معمولا در برنامه های شرکتی که دارای ViewModel های زیادی هستند و در مواقعی که شما می خواهید کد مشترکی را در چندین صفحه اجرا کنید ، استفاده می شود.از نکات مثبت این روش قابلیت استفاده ی مجدد از کد ،قابلیت استفاده در کنار کلاس های ViewModel و راحتی در پیاده سازی با Ajax است.

استفاده از ViewBag

ViewBag یک پراپرتی Dynamic است (یعنی بعد از تعریف هر پراپرتی از آن خود به خود آن پراپرتی به کلاس اصافه می شود). ما با استفاده از این روش می توانیم دیتا ها را در قابل یک شیء به View پاس دهیم و در حقیقت ما هیچ گونه Model اضافی به صفحه نخواهیم داد. نمونه ی کاربرد ViewBag مسیج هایی هستند که از راه ViewBag.Message به View فرستاده می شوند. از مزایای این روش می توان ارسال داده ها به View با کمترین فشار به برنامه ، Syntax قابل فهم و مشخص نکردن نوع داده ی خاص برای داده ها را نام برد.استفاده از این روش تنها برای ارسال پاره ی از داده ها پیشنهاد می شود!

بهره مندی از ViewData

ViewData یک پراپرتی تعریف شده است در کلاس ControllerBase است.برای استفاده از مقدار های ذخیره شده ی داخل آن در View باید نوع داده ی آن ها را تبدیل کرد. برای دسترسی به داده های ذخیره شده داخل ViewData باید از یک کلید (Key) استفاده کرد. در گذشته و در قبل از معرفی شدن MVC 3 از ViewData به جای ViewBag استفاده می شد. اکنون استفاده از ViewBag بیشتر پیشنهاد می شود.

پاس دادن داده ها با TempData

TempData نیز همانند ViewData داده ها را با Key ذخیره می کند ، یک پراپرتی در کلاس ControllerBase است و نیاز به تبدیل نوع داده برای نمایش دارد. اما در TempData ما می توانیم داده ها را از یک Controller به دیگری بفرستیم درحالی که این عمل در ViewData و ViewBag قابل انجام نبود!در زمانی که شما می خواهید یک داده را تا زمان دریافت Request بعدی نگاه دارید ، استفاده از TempData بهترین راه حل است. اما در استفاده از این روش احتیاط به خرج دهید چون ممکن است حفره ی امنیتی در سیستم ایجاد کند(با توجه به این که TempData از Session های Browser استفاده می کند) و Visual Studio هیچ Intellisense برای آن در نظر نگرفته است.توجه داشته باشید که قبل از استفاده از TempData مقدار هایی که ممکن است Null باشند باید چک شوند.

استفاده از Tuple

Tuple یک کلاس تغیر ناپذیر است که به تازگی معرفی شده و به ما این امکان را می دهد تا دسته هایی از انواع داده ی(Data Type) مختلف درست کنیم. این روش برای برنامه های کوچک و کاربردی کار ساز است و در حالات خاص می تواند کمک زیادی به ما بکند. اما در برنامه های MVC استفاده از Tuple تنها در زمان هایی که شما قصد استفاده از ViewModel را ندارید پیشنهاد میش شود.از نکات خوب این روش بی نیاز بودن به کلاس های ViewModel است. اما به علت این که این کلاس تنها 8مورد را در خود جای می دهد استفاده از این روش در موارد معمول پیشنهاد نمی شود.ما با نکات خوب و بد هر کدام از روش ها آشنا شدیم و زین پس می توانیم در مواقع لازم بر حسب نیاز از یکی از این روش ها بهره ببریم. ممنون از همراهی شما خوبان ، توسینسو باشید


پارسا صفوی
پارسا صفوی

برنامه نویس وب

طراح و برنامه نویس Full-Stack وب

نظرات