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



نکته 1 : اگر دقت کنید Paging وجود داره ! حالا اگر روی صفحه 1 کلیک بشه چیزی که سرچ کردیم رو نشون میده در غیر اینصورت اگر روی دکمه Previous هم کلیک کنید بازهم اطلاعات قابل نمایش نیست.
نکته 2 : اصولا زمانی که آیتمی وجود نداشته باشه و یا هنوز تعدا رکورد ها به اندازه تعیین شده برای صفحه بندی نرسیده نباید Paging نشون داده بشه. برای اینکار شما باید Paging رو توی if صدا میزدید که اگر اینکارم انجام بدید کلا دیگه دکمه ای که توی "نکته 1" عرض کردم هم وجود نداره که کاربر بخواد روش کلیک کنه . چیزی که سرچ کرده رو ببینه.
جهت اطمینان میتونید خودتون مواردی که خدمتتون عرض کردم رو بررسی بفرمایید. رفع اشکالش هم فکرنمیکنم کار پیچیده ای باشه، اگر مایل بودید بفرمایید تا مشکل رو بررسیش کنیم
سلام دوست من
خیلی ممنون از توضیحاتی که دادید
لطف بفرمایید کدی که داخل کنترولر نوشتیدو تگ form که داخل ویو قرار دادید رو ارسال کنید تا بنده ببینم
تا باهم مرحله به مرحله پیش بریم
کاربرگرامی ! لطفا به پیام صوتی زیر گوش دهید.
سلام مجدد، ممنون از پیگیریتون
جناب مومنی عزیز خدمتتون که عرض کردم من سورس خود شمارو دارم چک میکنم، هیچ کدی ننوشتم، صرفا پروژه ای که آخرین جلسه قرار داده شده رو اجرا گرفتم و بررسی کردم
مورد اول اینکه این باگ مربوط به بخش و سیستم خاصی نیست و هرجایی که دارید از کلاس هایی که برای Paging ساختید استفاده میکنید این مشکل رو دارن، من برای نمونه توی Category این مثال رو زدم و عکس ارسال کردم
مورد دوم درخصوص if هست، احتمالا من واضح توضیح ندادم که باعث شده متوجه منظورم نشید. منظور من اون if ی هست که سمت View نوشتید و چک کردید که اگر دیتایی هست که اونهارو نمایشبده درغیر اینصورت پیغام "ایتمی وجود ندارد" رو نمایش بده. حالا چیزی که من توی نکته 2 خدمتتون عرض کردم مربوط به این بود که شما باید اون پارشیال paging رو توی بدنه if و بعد از لود دیتاها صدا بزنید چون اصولا زمانی که دیتایی وجود نداره نباید Paging هم وجود داشته باشه
مورد سوم هم دلیل نمایش دکمه Previous هست که کاملا داره درست عمل میکنه ! ایرادی توی پارشیال Paging وجود نداره. دلیل نمایش دکمه Previous هم اینه که شما وقتی مثلا توی صفحه 4 باشید و عنوانی رو چیزی سرچ کنید و اطلاعاتی وجود نداره، اما بازهم صفحه جاریتون همون 4 هست (که باگ سیستم از همینجا نشات میگیره) !
الان مشکل سرچ کردن در قسمت دسته بندی محصول هست درسته!؟؟
خیر ! توی پاراگراف دوم پیام قبلی توضیح دادم خدمتتون.
" این باگ مربوط به بخش و سیستم خاصی نیست و هرجایی که دارید از کلاس هایی که برای Paging ساختید استفاده میکنید این مشکل رو دارن، من برای نمونه توی Category این مثال رو زدم و عکس ارسال کردم "
من دسته بندی محصولات رو بعنوان مثال ذکر و تست کردم، شما هر بخش رو دست دارید تست کنید
دوست عزیز زمانی که در صفحه چهارم شماا سرچ میکنید اون page id که شما داخل form گزاشتید با سرچ کردن ارسال میشه به کنترولر یعنی شماا view model قسمت page id رو پر کردید و این کاملا منطقی هست
عنوانی هم که سرچ میکنید یک عنوانی باشه که در دیتابیس وجود داشته باشه
اگر در دیتابیس وجود نداشته باشه ایتمی وجود ندارد رو برای ما نمایش میده
اما شما میتونید با یک if داخل کنترولر این مشکل رو حل کنید
مثلا بگید اگر page id بزرگ تر از ۱ بود و اگر مقداری در جستجو وجود داشت
Page id رو برار ۱ برای من قرار بده
این نکته رو هم بگم اقای حمیدی من این سیستم pagging که در دوره پیاده سازی کردم
اجازه بدید من پروژه رو بررسی کنم
اقای حمیدی ادرس تگ form رو بررسی کردید؟
بله PageId پره و ارسال میشه و کاملا منطقی هست و همچنین کاملا اشتباه ! مثال رو خدمتتون عرض کردم، چیزی که سرچ میکنیم توی دیتابیس هست ولی توی Page 4 نیست اما باید توی خروجی نشون داده بشه اما نشون نمیده ! اول کار همه موارد رو با عکس و جزئیات کامل ارسال کردم خدمتتون
جسارتا راه حلی هم که دادید اصلا صحیح نیست به این دلیل که اگر چیزی که شما جستجو میکنید تعداد رکورد هاش زیاد باشه و صفحه بندی انجام بشه شما باید بتونید صفحات بعدی اون جستجو رو هم ببینید اما با اینکار هی برگردونده میشه به Page 1 . از طرفی اگر راه حلی هم در نظر داشته باشید باید ترجیحا توی کلاس هایی که ساختید اعمال بشه نه توی سطح کنترلر یا سرویس !! چون اینطوری شما باید کلی کنترلر یا سرویس رو اصلاح کنید که کار زمان بری هست
جناب مومنی عزیز من هم دقیقا به همین دلیل بهتون پیام دادم که درجریان باشید هرجایی دارید از این سیستم Paging استفاده میکنید این باگ رو داره و بهتره اصلاحش کنید.
پیشنهاد میکنم سناریویی که خدمتتون عرض کردم رو یکبار برای خودتون با همون عناوینی که توی دیتابیس ایجاد کردم پیش ببرید تا مشکل رو بهتر متوجه بشید
بله اون آدرس رو بررسی و برای تستس اصلاحش کردم چون داشت به Order اشاره میکرد
یه تغییری تو کلاس ایجاد کردم بنظر مشکل حل شد اما فرصت نکردم کامل بررسی و تستش کنم، اگر فرصت دارید تستش کنید یه پیام بهم بدید تا عکسش رو براتون ارسال کنم یه تست کنید اگر اوکی بود که برای دوستان هم قرار بدید استفاده کنن اگر هم وقتش رو نداریدسعی میکنم فردا خودم کامل بررسیش کنم و راه حل رو بهتون ارائه بدم
خیر ! 😅
مهندس عزیز من چندین بار گفتم مشکل از Paging شما هست نگفتم که کوئری مشکل داره ! خب معلومه خروجی متغییر x شما الان درسته ! شما باید خروجی متد رو بررسی کنید، شما همینجا توی سرویستون مقداری رو که دارید return میکنید بریزید توی یه متغییر و نتیجه رو ببینید تا متوجه بشید
بازهم میگم مشکل از کلاس و هلپری هست که برای Paging ها ساختید
و مجددا بازهم میگم سناریویی که اول کار توضیح دادم رو تست کنید
هرجوری راحت هستید بهم پیام بدید تا مشکل و راه حلش رو توضیح بدم خدمتتون
بله دوست عزیز در حال تست کردن بودم همون موقع پیام دادید گفتم شاید این نکته به ذهن شما اومده
در مرحله دیباگ بودم:|
همین جا توضیح بدید اگر راه حل رو پیدا کردید
اون ابتدایی ترین کاری بود که برای تست میشد انجام داد، تست من از اون مرحله گذشته که باگ رو پیدا کردم 😉
عرض کردم چون نرسیدم کامل تستش کنم ممکنه توی همه حالت ها خروجیش صحیح نباشه و با گذاشتنش اینجا باعث گمراهی دوستان بشه ، اگر با پیام دادن راحت نیستید موردی نداره، فردا اوکیش میکنم نتیجه رو همینجا اطلاع میدم که بتونید هم به دوستان ارائه بدید هم توی پروژه هاتون اصلاحش کنید
موفق باشید 🌹
خیلی دوست دارم راه حلتون رو ببینم
اما من تونستم سمت view هندلش کنم این مشکل رو راه حلتون رو اشتراک بزارید من هم ببینیم چالش خوبی بود



موفق باشید 🌹 همچنین
منتظر هستم که ببینم تو کلاس و کد چه تغیریی دادید 😉
بازم مرسی که اطلاع دادید
تصاویری هم که من ارسال کردم به صورت کلی هست
مهمترینش اخرین تصویر هست که من کدش رو دستکاری کردم
بازم مرسیی از این که گفتید تشکر فراوان
عکس اول موردی هست که چند بار عرض کردم که اصولا Paging باید زمانی انجام بشه که هم دیتا وجود داشته باشه و هم دیتا به اندازه ای باشه که Paging فعال بشه، راه حلش هم گفتم که باید پارشیال Paging رو توی بدنه if صدا بزنید که شماهم اینجا درست تعییرات رو اعمال کردید
توی عکس دوم هیچ تغییر خاصی ندیدم !
توی عکس سوم هم چشمی بنظر مشکلی نداره (البته اگر که اون تگ input زیر if روهم بزارید توی else) ! ولی از اون جهت که خدمتتون عرض کردم تغییر توی کنترلر و یا ویو منجر به تغییر در کل سلوشن میشه زیاد حرکت جالبی نیست !
بله حتما، اگر مشکلی پیش نیاد حتما فردا کد رو تست میکنم و در نهایت راه حل مناسبی ارائه میدم خدمتتون
خواهش میکنم، خوشحال میشم بتونم کمکی کنم 🌹
بله درست میگید
اما گفتم منتظر راه حل شما هستم
اون تغیری هم که من انجام دادم و if گزاشتم صرفا جهت رفع کردن مشکل بود بنده نگفتم این راه بهترین راه هست
نظرم رو دادم
تا شما هم راه حلتون بزارید
این رو هم میشه با یک partial کنترل کرد اما اولویت اول با سرویس و کلاس هست
که شما میگید من حل کردم مشکل رو بازم منتظر جوابتون هستم
سلام جناب مومنی عزیز، وقت بخیر
برای رفع باگ کافیه فقط کد زیر رو به متد Build از کلاس Pager اضافه کنید :

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

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

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

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

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

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

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

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