• 1401/05/29

وجود باگ در سیستم Paging پیاده سازی شده :

با سلام و احترام

جناب مومنی عزیز توی کامنت ها چندین بار سعی کردم که بهتون جواب بدم اما متاسفانه پاسخم تایید نمیشد ! فرموه بودید اینجا بعنوان پرسش مشکل رو مطرح کنم

همونطور که خدمتتون عرض کردم سیستم Paging ی که پیاده سازی کردید باگ داره. درمورد کدها هم که فرموده بودید خواستم بگم من صرفا سورس خودتون رو اجرا و بررسی کردم.

بعنوان مثال این سناریو رو درنظر بگیرید :

جدول شما شامل 20 تا رکورد هست، Paging شما روی نمایش 5 رکور قرار گرفته شده پس 4 صفحه دارید. شما روی صفحه 4 هستید و عنوانی رو سرچ میکنید که توی صفحه 4 وجود نداره اما توی صفحه 1 وجود داره. نتیجه ای که برای شما برگردونده میشه "ایتمی وجود ندارد" هست ! دلیلش رو هم عرض کردم اینه که چون صفحه جاری 4 هست، زمانی که عنوانی جستجو میشه شماره صفحه جاری هم ارسال میشه و توی اون صفحه دنبال عنوان سرچ شده میگرده ! ولی 2 تا نکته وجود داره، به عکس های زیر دقت کنید در ادامه 2 نکته روهم توضیح میدم :

نکته 1 : اگر دقت کنید Paging وجود داره ! حالا اگر روی صفحه 1  کلیک بشه چیزی که سرچ کردیم رو نشون میده در غیر اینصورت اگر روی دکمه Previous هم کلیک کنید بازهم اطلاعات قابل نمایش نیست.

نکته 2 : اصولا زمانی که آیتمی وجود نداشته باشه و یا هنوز تعدا رکورد ها به اندازه تعیین شده برای صفحه بندی نرسیده نباید Paging نشون داده بشه. برای اینکار شما باید Paging رو توی if صدا میزدید که اگر اینکارم انجام بدید کلا دیگه دکمه ای که توی "نکته 1" عرض کردم هم وجود نداره که کاربر بخواد روش کلیک کنه . چیزی که سرچ کرده رو ببینه.

 

جهت اطمینان میتونید خودتون مواردی که خدمتتون عرض کردم رو بررسی بفرمایید. رفع اشکالش هم فکرنمیکنم کار پیچیده ای باشه، اگر مایل بودید بفرمایید تا مشکل رو بررسیش کنیم

  • 1401/05/29
  • ساعت 15:09

سلام دوست من 

خیلی ممنون از توضیحاتی که دادید 

لطف بفرمایید کدی که داخل کنترولر نوشتیدو تگ form که داخل ویو قرار دادید رو ارسال کنید تا بنده ببینم 

تا باهم مرحله به مرحله پیش بریم 


  • 1401/05/29
  • ساعت 15:18

کاربرگرامی ! لطفا به پیام صوتی زیر گوش دهید.


  • 1401/05/30
  • ساعت 08:25

سلام مجدد، ممنون از پیگیریتون

جناب مومنی عزیز خدمتتون که عرض کردم من سورس خود شمارو دارم چک میکنم، هیچ کدی ننوشتم، صرفا پروژه ای که آخرین جلسه قرار داده شده رو اجرا گرفتم و بررسی کردم

مورد اول اینکه این باگ مربوط به بخش و سیستم خاصی نیست و هرجایی که دارید از کلاس هایی که برای Paging ساختید استفاده میکنید این مشکل رو دارن، من برای نمونه توی Category این مثال رو زدم و عکس ارسال کردم

مورد دوم درخصوص if هست، احتمالا من واضح توضیح ندادم که باعث شده متوجه منظورم نشید. منظور من اون if ی هست که سمت View نوشتید و چک کردید که اگر دیتایی هست که اونهارو نمایشبده درغیر اینصورت پیغام "ایتمی وجود ندارد" رو نمایش بده. حالا چیزی که من توی نکته 2 خدمتتون عرض کردم مربوط به این بود که شما باید اون پارشیال paging رو توی بدنه if و بعد از لود دیتاها صدا بزنید چون اصولا زمانی که دیتایی وجود نداره نباید Paging هم وجود داشته باشه

مورد سوم هم دلیل نمایش دکمه Previous هست که کاملا داره درست عمل میکنه ! ایرادی توی پارشیال Paging وجود نداره. دلیل نمایش دکمه Previous هم اینه که شما وقتی مثلا توی صفحه 4 باشید و عنوانی رو چیزی سرچ کنید و اطلاعاتی وجود نداره، اما بازهم صفحه جاریتون همون 4 هست (که باگ سیستم از همینجا نشات میگیره) !

 


  • 1401/05/30
  • ساعت 15:13

الان مشکل سرچ کردن در قسمت دسته بندی محصول هست درسته!؟؟


  • 1401/05/30
  • ساعت 15:18

خیر ! توی پاراگراف دوم پیام قبلی توضیح دادم خدمتتون.

" این باگ مربوط به بخش و سیستم خاصی نیست و هرجایی که دارید از کلاس هایی که برای Paging ساختید استفاده میکنید این مشکل رو دارن، من برای نمونه توی Category این مثال رو زدم و عکس ارسال کردم "

من دسته بندی محصولات رو بعنوان مثال ذکر و تست کردم، شما هر بخش رو دست دارید تست کنید


  • 1401/05/30
  • ساعت 15:20

دوست عزیز زمانی که در صفحه چهارم شماا سرچ میکنید اون page id که شما داخل form گزاشتید با سرچ کردن ارسال میشه به کنترولر یعنی شماا view model قسمت page id رو پر کردید و این کاملا منطقی هست 

عنوانی هم که سرچ میکنید یک عنوانی باشه که در دیتابیس وجود داشته باشه 

اگر در دیتابیس وجود نداشته باشه ایتمی وجود ندارد رو برای ما نمایش میده 

اما شما میتونید با یک if داخل کنترولر این مشکل رو حل کنید 

مثلا بگید اگر page id بزرگ تر از ۱ بود و اگر مقداری در جستجو وجود داشت 

Page id رو برار ۱ برای من قرار بده 

این نکته رو هم بگم اقای حمیدی من این سیستم pagging که در دوره پیاده سازی کردم 

اجازه بدید من پروژه رو بررسی کنم 

 


  • 1401/05/30
  • ساعت 15:27

اقای حمیدی ادرس تگ form رو بررسی کردید؟


  • 1401/05/30
  • ساعت 15:32

بله PageId پره و ارسال میشه و کاملا منطقی هست و همچنین کاملا اشتباه ! مثال رو خدمتتون عرض کردم، چیزی که سرچ میکنیم توی دیتابیس هست ولی توی Page 4 نیست اما باید توی خروجی نشون داده بشه اما نشون نمیده ! اول کار همه موارد رو با عکس و جزئیات کامل ارسال کردم خدمتتون

جسارتا راه حلی هم که دادید اصلا صحیح نیست به این دلیل که اگر چیزی که شما جستجو میکنید تعداد رکورد هاش زیاد باشه و صفحه بندی انجام بشه شما باید بتونید صفحات بعدی اون جستجو رو هم ببینید اما با اینکار هی برگردونده میشه به Page 1 . از طرفی اگر راه حلی هم در نظر داشته باشید باید ترجیحا توی کلاس هایی که ساختید اعمال بشه نه توی سطح کنترلر یا سرویس !! چون اینطوری شما باید کلی کنترلر یا سرویس رو اصلاح کنید که کار زمان بری هست

جناب مومنی عزیز من هم دقیقا به همین دلیل بهتون پیام دادم که درجریان باشید هرجایی دارید از این سیستم Paging استفاده میکنید این باگ رو داره و بهتره اصلاحش کنید. 

پیشنهاد میکنم سناریویی که خدمتتون عرض کردم رو یکبار برای خودتون با همون عناوینی که توی دیتابیس ایجاد کردم پیش ببرید تا مشکل رو بهتر متوجه بشید

 


  • 1401/05/30
  • ساعت 15:33

بله اون آدرس رو بررسی و برای تستس اصلاحش کردم چون داشت به Order اشاره میکرد


  • 1401/05/30
  • ساعت 15:56

یه تغییری تو کلاس ایجاد کردم بنظر مشکل حل شد اما فرصت نکردم کامل بررسی و تستش کنم، اگر فرصت دارید تستش کنید یه پیام بهم بدید تا عکسش رو براتون ارسال کنم یه تست کنید اگر اوکی بود که برای دوستان هم قرار بدید استفاده کنن اگر هم وقتش رو نداریدسعی میکنم فردا خودم کامل بررسیش کنم و راه حل رو بهتون ارائه بدم


  • 1401/05/30
  • ساعت 16:42

خیر ! 😅

مهندس عزیز من چندین بار گفتم مشکل از Paging شما هست نگفتم که کوئری مشکل داره ! خب معلومه خروجی متغییر x شما الان درسته ! شما باید خروجی متد رو بررسی کنید، شما همینجا توی سرویستون مقداری رو که دارید return میکنید بریزید توی یه متغییر و نتیجه رو ببینید تا متوجه بشید

بازهم میگم مشکل از کلاس و هلپری هست که برای Paging ها ساختید

و مجددا بازهم میگم سناریویی که اول کار توضیح دادم رو تست کنید

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


  • 1401/05/30
  • ساعت 16:44

بله دوست عزیز در حال تست کردن بودم همون موقع پیام دادید گفتم شاید این نکته به ذهن شما اومده

در مرحله دیباگ بودم:|


  • 1401/05/30
  • ساعت 16:50

همین جا توضیح بدید اگر راه حل رو پیدا کردید

 


  • 1401/05/30
  • ساعت 17:09

اون ابتدایی ترین کاری بود که برای تست میشد انجام داد، تست من از اون مرحله گذشته که باگ رو پیدا کردم 😉

عرض کردم چون نرسیدم کامل تستش کنم ممکنه توی همه حالت ها خروجیش صحیح نباشه و با گذاشتنش اینجا باعث گمراهی دوستان بشه ، اگر با پیام دادن راحت نیستید موردی نداره، فردا اوکیش میکنم نتیجه رو همینجا اطلاع میدم که بتونید هم به دوستان ارائه بدید هم توی پروژه هاتون اصلاحش کنید

موفق باشید 🌹


  • 1401/05/30
  • ساعت 17:10

خیلی دوست دارم راه حلتون رو ببینم 

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

 


  • 1401/05/30
  • ساعت 17:13

موفق باشید 🌹 همچنین 

منتظر هستم که ببینم تو کلاس و کد چه تغیریی دادید 😉

بازم مرسی که اطلاع دادید

تصاویری هم که من ارسال کردم به صورت کلی هست 

مهمترینش اخرین تصویر هست که من کدش رو دستکاری کردم

بازم مرسیی از این که گفتید تشکر فراوان


  • 1401/05/30
  • ساعت 17:29

عکس اول موردی هست که چند بار عرض کردم که اصولا Paging باید زمانی انجام بشه که هم دیتا وجود داشته باشه و هم دیتا به اندازه ای باشه که Paging فعال بشه، راه حلش هم گفتم که باید پارشیال Paging رو توی بدنه if صدا بزنید که شماهم اینجا درست تعییرات رو اعمال کردید 

توی عکس دوم هیچ تغییر خاصی ندیدم !

توی عکس سوم هم چشمی بنظر مشکلی نداره (البته اگر که اون تگ input زیر if روهم بزارید توی else) ! ولی از اون جهت که خدمتتون عرض کردم تغییر توی کنترلر و یا ویو منجر به تغییر در کل سلوشن میشه زیاد حرکت جالبی نیست !


  • 1401/05/30
  • ساعت 17:32

بله حتما، اگر مشکلی پیش نیاد حتما فردا کد رو تست میکنم و در نهایت راه حل مناسبی ارائه میدم خدمتتون

خواهش میکنم، خوشحال میشم بتونم کمکی کنم 🌹

 


  • 1401/05/30
  • ساعت 17:34

بله درست میگید 

اما گفتم منتظر راه حل شما هستم 

اون تغیری هم که من انجام دادم و if گزاشتم صرفا جهت رفع کردن مشکل بود بنده نگفتم این راه بهترین راه هست 

نظرم رو دادم 

تا شما هم راه حلتون بزارید

این رو هم میشه با یک partial کنترل کرد اما اولویت اول با سرویس و کلاس هست  

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


  • 1401/05/31
  • ساعت 13:14

سلام جناب مومنی عزیز، وقت بخیر

برای رفع باگ کافیه فقط کد زیر رو به متد Build از کلاس Pager اضافه کنید :

برای تکمیل شدنش هم چند تا تغییر توی View ها نیاز هست :

مورد اول رو که قبلا عرض کردم، باید Partial مربوط به Paging همیشه توی if صدا زده بشه به شکل زیر :

مورد دوم اینکه باید به دکمه "فیلتر" توی همه صفحات یه کلاس بدیم بعنوان مثال بنام "btnFilter" مثل شکل زیر :

و بعد از اون توی فایل اسکریپت هایی که بصورت گلوبال تعریف کردیم این اسکریپت رو اضافه کنیم :

همونطور که قبلا هم عرض کردم اصولا زمانی که تعداد رکوردها به حد نساب برای صفحه بندی نرسیده Paging نباید نشون داده بشه، برای این کار هم کافیه توی Partial مربوط به Paging ها یه شرط بصورت زیر اضافه کنیم :

همونطور که قول داده بودم این هم نحوه رفع اشکال، تا جایی که من تستش کردم بنظر نمیرسه ایرادی داشته باشه، امیدوارم مفید باشه براتون


  • 1401/05/31
  • ساعت 13:22

یه مورد دیگه هم که دیدم شاید اصلاح بشه بهتره مربوط به شماره ردیف ها هست که بهتره بجای ساخت متغییر توی هر صفحه، با اعمال تغییر ساده تری بصورت زیر پیاده سازیش کنید :

کافیه یه پراپرتی به کلاس BasePaging بصورت زیر اضافه کنید :

 

و توی متد Build از کلاس Pager به اینصورت مقدار دهی کنید :

حالا کافیه توی View بجای اون index های  که ساختید از RowNumber++ استفاده کنید به این صورت :

 


  • 1401/06/02
  • ساعت 09:08

جناب مومنی عزیز مواردی که خدمتتون ارائه دادم رو تست و بررسی کردید ؟ مشکل برطرف شد ؟


logo-enamadlogo-samandehi