در ادامه بخش قبلی ، یک لیست از رستورانها را نمایش داده و مراحل ایجاد پروزه را پیگیری میکنیم . در طول پروژه من باید لیست رستورانها را از DataBase صدا بزنم ، ولی هنوز به آن مرحله نرسیده ام برای همین فعلن باید یک لیست از داده ها ایجاد و از آن استفاده نمود .
بسمه تعالی
ASP.NET Core 1 – قسمت شانزدهم
در ادامه بخش قبلی ، یک لیست از رستورانها را نمایش داده و مراحل ایجاد پروزه را پیگیری میکنیم . در طول پروژه من باید لیست رستورانها را از DataBase صدا بزنم ، ولی هنوز به آن مرحله نرسیده ام برای همین فعلن باید یک لیست از داده ها ایجاد و از آن استفاده نمود . فعلن قصد ایجاد یک سرویس فرضی بر روی دیتای فرضی را داشته تا بعدا بحث دیتابیس را هم به میان آوریم .
برای ادامه بحث باید به سراغ فولدر Service رفته و مراحل کار را پیگیری کنیم. یک Component ایجاد میکنیم تا بتوان از آن در Controller استفاده کنیم. یک کلاس جدید به نام RestaurantData ایجاد میکنیم . اینجا نیاز به پیاده سازی 2 اینترفیس به شکل زیر داریم . مواظب ایجاد شدن NameSpace ها متدهای Interface به درستی باشید .
دقت کنید تصویری که قرار داده شد مرحله سرویس است و پس از آن باید به سراغ Controller رفته و تغییرات لازم در آنرا ایجاد کنیم .
در Controller ما به دسترسی مستقیم به داده ها اعتقاد نداریم . فقط باید متد GetAll را صدا زده و از نتیجه آن استفاده نمود . در قسمتهای قبلی در Startup.cs سرویس Greeter را صدا زده و از آن Instant ایجاد نموده بودیم . مشابه این کار برای دیگر سرویسها هم باید ایجاد گردد تا بتوان در سطح پروژه از سرویسها بهره برد .
برای Register کردن این سرویس از AddScoped استفاده کردیم چرا که این متد برای هر یک Http Request یک Instant ایجاد کرده و میتوان از آن به ازای هر درخواست استفاده نمود . حالا وقت استفاده از سرویس در Controller می باشد .
در HomeController یک متد سازنده ایجاد کرده و مراحل را پیگیری میکنیم .
پروژه را ذخیره و اجرا کنید و باز هم پیام خطا بگیرید .
علت بروز این خطا این است که در View فقط منتظر داشتم یک رکورد هستیم ، ولی سرویس ما یک لیست داده را منتقل مینماید . برای حل این مشکل باید مشابه زیر عمل نمود .
تغییر Model در View به یک IEnumerAble و داشتن یک Loop در View مشکل را حل خواهد کرد . دقت کنید که Loop باید بر روی عبارت Model با M به صورت Capital قرار گیرد .
و این هم نتیجه :
در مورد Razor بعدن زیاد صحبت خواهیم کرد . این Loop فقط یکی از کوچکترین توانمندیهای Razor در تشخیص کدهای C# از HTML بود که مشاهده گردید. حالا دیگر شما توانسته اید یک لیست از داده را بدون ایجاد رکورد مستقیم در Controller و از طریق صدا زدن سرویس نمایش دهید و این یعنی نزدیک شدن به وضعیت داشتن دیتابیس و یک پروژه در وضعیت واقعی .
شما را به بررسی بخشهای بعدی دعوت میکنم که در آنها ریزتر عمل کرده و دیگر اجزای مورد نیاز پروژه را بررسی و آنها را ایجاد خواهیم نمود.
علی کلاهدوزان
موفق باشید .