• ASP.NET Core 1 – قسمت هجدهم
ASP.NET Core 1 – قسمت هجدهم
1395/02/03 - 13:19:49 // MVC 5 & 6 // 1 نظر // 2857 بازدید

در قسمت قبلی یک لیست از رستورانها را نمایش دادیم و این قابلیت را با استفاده از یک ViewModel به صورت ساده تر به نمایش گذاشتیم . مسئله اینجاست که همیشه نمی توان همه داده ها را در یک صفحه خلاصه و نمایش داد .

بسمه تعالی

ASP.NET Core 1 قسمت هجدهم

در قسمت قبلی یک لیست از رستورانها را نمایش دادیم و این قابلیت را با استفاده از یک ViewModel به صورت ساده تر به نمایش گذاشتیم . مسئله اینجاست که همیشه نمی توان همه داده ها را در یک صفحه خلاصه و نمایش داد . گاهی لازم است بخشی از داده ها بر اساس درخواست و کلیک کاربر در صفحه ای دیگر و به صورت مجزا نمایش داده شود ، ضمن اینکه این کار سبب جلوگیری از Load حجم زیادی از Data در خیلی از موارد خواهد شد . در این قسمت به بررسی چگونگی سناریوی نمایش Detail برای هر رکورد خواهیم پرداخت .

اولین قدم اضافه کردن یک Action Method دیگر خواهد بود . وظیفه این Action Method نمایش ریز اطلاعات رکورد انتخاب شده خواهد بود . مسلمن این Action Method هم دارای خروجی view Result خواهد بود . هر رکورد در سناریوی فعلی یک ID دارد که unique میباشد و در نتیجه متد ما هم باید دارای یک ورودی ID باشد تا بر اساس آن مشخص شود کدام رکورد انتخاب شده است .

فعلن برای اینکه بتوان نمایش داد که ID انتخاب شده در وضعیت درستی قرار دارد یا نه ، نوع خروجی متد را String قرار داده و فقط مقدار وارد شده را بر میکردانیم .

 
 
 

خوب حالا با اجرای پروزه و استفاده از 2//Home/Detail به عنوان مثال می توانید نتیجه را ببینید . مقدار وارد شده در خروجی نمایش داده خواهد که در اینجا 2 خواهد بود . اگر Routing را به خاطر داشته باشید ، می توانید متوجه شوید که ID چگونه به عنوان یک پارامتر در سیستم Handle خواهد شد .

 
این مقدار همانطور که مشاهده میکنید Optional تعریف شده بود و در صورت مقدار دهی میتوان از آن استفاده کرد . از طریق Route تعریف شده ، سیستم منتظر یک مقدار به ازای ID خواهد بود . به عنوان مثال اگر پارامتر را به شکل Details?id=2 هم وارد کنید ، باز هم وضعیت مشابه خواهد بود و Query String را هم به عنوان پارامتر ورودی خواهد شناخت به شرطی که ID را به عنوان پارامتر در URL ببیند .

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

 
 
حالا که خروجی متد را عوض کردیم و متدی به نام Get استفاده کردیم که اصلن وجود خارجی ندارد ، باید به سراغ Service از قبل ایجاد شده رفته و متد را برای آن ایجاد کنیم و بعد بازکردیم و خروجی متد را تصحیح و آنرا به حالت مورد نظر تغییر دهیم .

برای ایجاد سرویس جدید باید به سراغ RestaurantData.cs رفته و تغییرات لازم را در آن ایجاد کنیم .

اولن باید یک متد به نام Get به Interface ایجاد شده اضافه گردد . در مرحله بعد باید این متد پیاده سازی و بدنه آن ایجاد شود . بدنه متد عملن یک خط کد Linq خواهد بود که سبب یافته شده رکورد بر اساس ID و سپس Return شدن آن خواهد شد . مواظب اضافه شدن System.Linq در NameSpace ها هم باشید .

 
 
 
خوب حالا باید تغییرات لازم در Home Controller ایجاد گردد.

 
 
تصویر بالا نتیجه تغییر در HomeController میباشد . مقدار Model به View پاس داده خواهد شد. خوب حالا به یک View جدید به نام Details نیاز داریم تا جزئیات را نمایش دهیم . برای ساده شدن کار من یک Copy از Index خواهم گرفت و نام آنرا عوض خواهم نمود .روی نام Index یک Ctrl+C بزنید و بعد در همان فولدر Home باز Ctrl+V زده و سپس فایل را Rename ونام آنرا Details قرار دهید .

برای این Viewجدید در اولین قدم باید Model صفحه را عوض نمود . بعد از آن هم باید محتوای صفحه را طوری تغییر داد که فقط نام رستوران انتخاب شده زا نمایش دهد . تغییرات به شکل زیر خواهد بود .

 
 
 

خوب حالا اگر در هنگام تست به جای /Home/Details/2 مثلن وارد کنیم /Home/Details/99 خواهیم دید که با پیام خطا روبرو خواهیم شد چرا که هیج رکوردی یافت نخواهد شد . View به دنبال یک Model غیر Null میگردد و با پیدا نشدن هیچ رکوردی این مقدار Null خواهد بود. برای جلوگیری از بروز خطا راههای زیادی هست . مثلن میتوان در Details Action یک IF برای بررسی مقدار و Null نبودن آن و سپس ایجاد خطای 404 در صورت Null بودن ایجاد کرد . برای اینکار باید مطابق شکل زیر خروجی متد را هم IActionResult قرار داد .

 
 
 

یا مثلن میتوان در صورت یافت نشدن رکورد و Null بودن مدل ، باز به همان صفحه Index باز گردیم . برای اینکار باید از Redirecttoaction استفاده کنیم.

 
 
 

وقتی به صفحه Details میرویم ، بد نیست یک Link برای بازگشت هم داشته باشیم . برای اینکار راههای متعددی هست که امتحان میکنیم .

 
 

وضعیت تگ A که روشن است . دومی هم یک HTML Helper است که در MVC 5 هم وجود داشت و برای ما Link تولید خواهد کرد . مقدار اول یک متن و مقدار بعدی نام Action Method خواهد بود . به دلیل عدم ذکر نام Controller فرض MVC بر این خواهد بود که در Current Controller به دنبال این متد باید بگردد. نتیجه هم 2 عدد Link با متن Home خواهد بود که در پایین صفحه Details ما را به صفحه Index هدایت خواهند کرد .

خوب در لیست رستورانها هم باید مثلن ID آنها یک Link باشد و بتوان با کلیک بر روی ان به صفحه Details رفت . برای اینکار کافی است از یک Actionlink دیگر در Index View هم استفاده کنیم .

 
 
 

همانطور که مشاهده میکنید Action Link میتواند یک Text برای نمایش و یک نام ActionMethod و یک پارامتر هم بگیرد و این پارامتر همان ID خواهد و با Save و اجرای پروژه خواهید دید که در لیست از این به بعد ID یک لینک است و می توان با کلیک روی آن به صفحه Details رفت .

 
 

وقتی من روی رکورد شماره 2 میروم و موس را روی ID شماره 2 نگه میدارم این لینک در پایین صفحه نمایان میشود و این یعنی همان URL که به صورت دستی در Browser وارد میکردیم و در اصل یعنی همان چیزی که میخواستیم .

در قسمت بعدی به بررسی Input Model های پیچیده تر و ایجاد فرم ثبت رستوران خواهیم پرداخت .

دانلود سورس پروژه

علی کلاهدوزان

موفق باشید .

علی کلاهدوزان
معرفی نویسنده : علی کلاهدوزان

سلام بر دوستان ،
شاید رایج است به عنوان پروفایل کاربر ، چند خطی راجع به خودم بنویسم ، ولی وضعیت کاری و سوابق من با یک جستجوی ساده در گوگل مشخص خواهد شد ، لذا سرتان را با مطالب بی مورد به درد نیاورم بهتر است . اگر نکته خاصی لازم بود بدانید در قسمت "ایلیا سافت در یک نگاه" به احتمال زیاد یافت خواهد شد . جزئیات بیشتر را سوال کنید ، آدرس ایمیل Ali@Kolahdoozan.com همیشه جوابگوی شماست .امیدوارم از مطالب سایت استفاده کرده باشید . شاد و پیروز باشید .

امتیاز به مطلب
           
نظرات کاربران
  • کاوه
    1395/02/09 - 10:54:28

    0
    0
    سلام استاد ممنون از آموزش های بسیار عالی شما من آموزش زیاد مطالعه کردم ولی به جرات میتونم بگم تنها آموزشی که تا اینجای کار اصلا سر درگم نشدم آموزشهای شما بود ممنون از وقتی که میذارید
     
     
    -----------------------------------------
    پاسخ : با تشکر از نظر شما 
ارسال نظر