در این نوشته مفهوم نما مدل به شدت وابسته به نوع ASP.NET Core MVC درباره چگونگی به کارگیری یک مدل درون یک فایل نما برای ساخت فرم اچ تی ام ال به کمک عبارت model@ گفته شد و نشان دادیم به کمک این عبارت می توانیم فرمی بسازیم تا داده هایی را برای ویژگی های یک کلاس مدل دریافت کند. به زبان ساده کلاس مدل، یک جدول از پایگاه داده را مدل می کند. برای درک از کلاس مدل و ساخت جدول ها به کمک کلاس های مدل به سی شارپ بهتر پیشنهاد می شود نوشته های Entity Framework را بخوانید.

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

نوشتن کلاس مدل

در این نوشته یک کلاس مدل به نام Employee داریم که در زیر آورده شده که درون پوشه Models در پروژه نگهداری می شود. نخست می خواهیم درون کلاس کنترل گر EmployeeController یک لیست از نمونه های این کلاس را بسازیم و سپس آن را درون برگه index.cshtml از مسیر Views/Employee نشان دهیم. بنابراین می خواهیم به کمک متد ()Index از کلاس EmployeeController این فهرست کارمندان را نمایش دهیم.

در واقع این یک همانند سازی است به گونه ای که تصور کنید که لیستی از کارمندان را به کمک Entity Framework از درون پایگاه داده خوانده ایم و اکنون در کنترل گر این لیست در دسترس است تا به فایل نما فرستاده شود. بنابراین نیاز به ساخت یک کلاس مدا به نام Employee در پوشه Models و ساخت یک کلاس کنترل گر به نام EmployeeController در پوشه Controllers که دارای یک متد به نام ()Index است و از این رو نیاز به ساخت یک فایل نما به نام index.cshtml در مسیر Views/Employee است.

کد زیر نشان می دهد که درون متد ()Index از کلاس کنترل گر EmployeeController یک لیست از نمونه ها کلاس Employee را ساخته ایم (<List<Employee) و هر یک از ویژگی ها کلاس را مقدار دهی کرده ایم. نام متغیر <List<Employee در اینجا employees است که آن را به فایل نما فرستاده ایم.

در نوشته مفهوم نما مدل به شدت وابسته به نوع ASP.NET Core MVC درباره ViewBag و ViewData گفتیم که دو شیوه فرستادن داده از یک متد کلاس کنترل گر به فایل نما هستند ولی در کد بالا به جای به کارگیری این دو، خود متغیر employees را به متد ()View فرستاده ایم، پس با این کار لیست کارمندان ساخته شده به نام employees را به فایل نما می فرستیم. همچنین به یاد داشته باشید متد View از کلاس ViewResult دارای سه Overload است که یکی از آنها تنها یک ورودی و آنهم نام یک فایل نما را می گیرد و دیگری همانند کد بالا می تواند دو ورودی بگیرد که نخستین نام فایل نما و دومی نام یک شی (متغیر نمونه ای از یک کلاس) است. همچنین یادآوری می کنم که اگر نام فایل نما نوشته نشود، پس فایلی همنام با نام متد فراخوان می شود.

اکنون که داده های دلخواه را به فایل نما (در اینجا Index.cshtml و همنام با متد کنترل گر) فرستادیم، باید فایل نما را به گونه ای آماده کنیم که داده های فرستاده شده را نمایش دهند. در نوشته  گفتیم که برای به کارگیری یک مدل درون یک فایل نما، باید به کمک عبارت model@ کلاس آن مدل را بالای فایل نما پیوست می کنیم. در این نوشته یک لیست از نمونه های کلاس را فرستاده ایم، پس یک تغییر کوچک در این پیوست کردن نیاز است. در کد زیر نشان داده ایم که این پیوست را باید به گونه <>List یا <>IEnumerable انجام دهیم.

شکل زیر نمای فایل Index.cshtml در پوشه Views/Employee را نشان می دهد. نخست کلاس مدب به گونه یک IEnumerable پیوست شده است. سپس دو متغیر به نام های Title و Welcome را به کمک ViewData نوشته ایم. درون بدنه اچ تی ام ال، به کمک عبارت ViewData@ مقدار متغیر Welcome را درون تگ h1 نمایش داده و سپس بر پایه نوشته های پیشین به کمک asp-action یک URL برای مقدار ویژگی href از تگ a ساخته ایم که این نشانی (مسیر) به متد EmployeeForm از کلاس EmployeeController اشاره می کند. (در نوشته مفهوم نما مدل به شدت وابسته به نوع ASP.NET Core MVC پیشین همین متد را ساخته ایم.)

سپس در بَند ۱۴ در یک حلقه foreach@ هر بار یکی از نمونه های کلاس Employee که در متغیر لیست employees ساخته ایم را نشان می دهیم. توجه کنید در حلقه foreach@ نام متغیر employees را نیاورده ایم، بلکه عبارت Model (با M بزرگ) را آورده ایم. سپس درون حلقه foreach@ هر بار به کمک متغیر employee مقدار ویژگی های FName و LName و Age از کلاس Employee برای این نمونه کنونی را نشان می دهیم.

بنابراین در ASP.NET Core MVC دو عبارت model@ و Model هر دو کاربردی در راستای یکدیگر دارند. model@ برای دسترسی به یک کلاس ویژه از مدل در یک فایل نما به کار می رود و باید آغاز فایل کلاس مدل را به کمک آن پیوست کنیم تا یک فایل نما به شدت وابسته به مدل داشته باشیم ولی از Model (با M بزرگ) برای دسترسی به ویژگی ها و نمونه های یک مدل کمک می گیریم. بنابراین Model دسترسی به یک نمونه از کلاس مدلی را نشان می دهد که این کلاس بالای برنامه و به کمک model@ پیوست شده است.