স্বাগতম! আমরা এখন আপনার কোর্সের Section 20 (Filters)-এর সর্বশেষ প্র্যাকটিক্যাল লেকচার— “UI Enhancements - Part 2” (লেকচার ৩০৬)-এ আছি।
গত লেকচারে আমরা মূলত Index ভিউ এবং Layout ভিউয়ের ডিজাইন আপডেট করেছিলাম। আজকের লেকচারে আমরা বাকি পেজগুলো (যেমন: Create, Edit, Delete এবং Excel Upload) আপডেট করব এবং ফিল্টার ক্লাসে একটি ছোট্ট বাগ (Bug) ফিক্স করব, যাতে পেজ লোড হওয়ার সাথে সাথে টেবিলের ডিফল্ট সর্টিং আইকনটি ঠিকঠাক দেখায়। চলুন দেখে নিই!
📝 Quick Revision Summary
ভবিষ্যতে দ্রুত রিভিশন দেওয়ার জন্য আজকের লেকচারের মূল কাজগুলো নিচে দেওয়া হলো:
- Buttons CSS Update (
Index.cshtml): টেবিলের ডানপাশে থাকাEditএবংDeleteলিংকগুলোতে যথাক্রমেbutton-blue-backএবংbutton-red-backCSS ক্লাস বসানো হয়েছে। - Breadcrumbs Addition:
Indexপেজের মতোCreate,Edit,DeleteএবংUpload from Excelপেজেও Breadcrumbs (যেমন:Contacts > Persons > Create) অ্যাড করা হয়েছে। - Form Container Update: ফর্মগুলোকে সুন্দর সাদা বাক্সে রাখার জন্য
center-boxক্লাসের বদলেform-containerক্লাস ব্যবহার করা হয়েছে। - Bug Fix in Filter (
PersonsListActionFilter): পেজ প্রথমে লোড হওয়ার সময় (যখন কোনো Sort প্যারামিটার থাকে না), তখন ডিফল্ট সর্টিং আইকন দেখানোর জন্য ফিল্টারেরOnActionExecutedমেথডেelseব্লক যুক্ত করা হয়েছে।
🔍 Comprehensive Breakdown
১. Updating Edit & Delete Buttons [Priority: 8/10]
Index.cshtml পেজে টেবিলের প্রতি রো-এর শেষে থাকা Edit এবং Delete লিংকগুলোকে সাধারণ টেক্সট থেকে বাটনে কনভার্ট করা হয়েছে:
<a href="/Persons/Edit/@person.PersonID" class="button-link button-blue-back">Edit</a>
<a href="/Persons/Delete/@person.PersonID" class="button-link button-red-back ml">Delete</a>
এখানে ml (Margin-Left) ক্লাসটি দুটি বাটনের মাঝে সামান্য ফাঁকা জায়গা তৈরি করে।
২. Updating CRUD Views (Create, Edit, Delete, Upload) [Priority: 9/10]
বাকি সবগুলো পেজে প্রায় একই ধরনের পরিবর্তন আনা হয়েছে। লেকচারার Index পেজ থেকে Breadcrumbs-এর কোডটি কপি করে অন্য পেজগুলোতে পেস্ট করেছেন এবং পেজের নাম অনুযায়ী সামান্য পরিবর্তন করেছেন।
Create View (Create.cshtml) Example:
<div class="flex">
<div class="flex-1 text-grey">
<span>Contacts</span>
<i class="fa-solid fa-caret-right"></i>
<span>Persons</span>
<i class="fa-solid fa-caret-right"></i>
<span>Create</span> </div>
</div>
<div class="form-container">
<a href="/Persons/Index" class="link-hover">Back to Persons List</a>
<h2 class="text-large">Create Person</h2> </div>
💡 Pro Tip from Lecturer: লেকচারার একটি দারুণ সাজেশন দিয়েছেন। যেহেতু Breadcrumb-এর কোডটি সব পেজেই প্রায় এক, তাই আপনি চাইলে এটিকে একটি Partial View (যেমন _Breadcrumbs.cshtml) বানিয়ে নিতে পারেন। পেজের নাম (যেমন “Create” বা “Edit”) ViewBag দিয়ে পাস করে কোড ডুপ্লিকেশন কমানো যায়।
৩. Fixing the Sorting Icon Bug via Action Filter [Priority: 10/10]
The Problem: ইউজার যখন প্রথমবার /Persons/Index পেজে ঢোকে, তখন URL-এ কোনো sortBy বা sortOrder প্যারামিটার থাকে না। ফলে, পেজটি “Person Name” কলাম অনুযায়ী সর্ট হয়ে আসলেও, কলামের নামের পাশে আপ/ডাউন অ্যারো আইকনটি দেখাচ্ছিল না।
The Cause: আমাদের PersonsListActionFilter-এ আমরা শুধু তখনই ViewBag আপডেট করছিলাম যখন রিকোয়েস্টের সাথে প্যারামিটার থাকে। else কন্ডিশনে কোনো ডিফল্ট ভ্যালু সেট করা ছিল না।
The Solution:
PersonsListActionFilter.cs ফাইলে OnActionExecuted মেথডে (যেখানে আমরা HttpContext.Items থেকে প্যারামিটার রিড করছিলাম), সেখানে else ব্লক যুক্ত করা হয়েছে:
// In PersonsListActionFilter.cs -> OnActionExecuted()
// ১. Sort By Parameter Check
if (parameters.ContainsKey("sortBy"))
{
personsController.ViewData["CurrentSortBy"] = Convert.ToString(parameters["sortBy"]);
}
else
{
// যদি URL-এ sortBy না থাকে, তবে ডিফল্ট হিসেবে 'PersonName' সেট করা হচ্ছে
personsController.ViewData["CurrentSortBy"] = nameof(PersonResponse.PersonName);
}
// ২. Sort Order Parameter Check
if (parameters.ContainsKey("sortOrder"))
{
personsController.ViewData["CurrentSortOrder"] = Convert.ToString(parameters["sortOrder"]);
}
else
{
// যদি URL-এ sortOrder না থাকে, তবে ডিফল্ট হিসেবে 'ASC' সেট করা হচ্ছে
personsController.ViewData["CurrentSortOrder"] = nameof(SortOrderOptions.ASC);
}
ফলাফল: এখন ইউজার প্রথমবার পেজে ঢুকলেও ফিল্টারটি else ব্লকে গিয়ে ডিফল্ট ভ্যালুগুলো ViewData-তে সেট করে দেবে, ফলে View-তে “Person Name” কলামের পাশে ঠিকঠাক আইকন দেখাবে।
৪. Re-enabling Client-side Validations [Priority: 8/10]
আগের লেকচারগুলোতে ফিল্টারের শর্ট-সার্কিটিং (Short-circuiting) চেক করার জন্য লেকচারার Create.cshtml এবং Edit.cshtml পেজের নিচের দিক থেকে ক্লায়েন্ট-সাইড ভ্যালিডেশনের স্ক্রিপ্টগুলো (_ValidationScriptsPartial) কমেন্ট করে রেখেছিলেন। এখন যেহেতু সব টেস্টিং শেষ, তাই সেগুলোকে আবার আনকমেন্ট (Uncomment) করে দেওয়া হয়েছে, যাতে ফর্ম সাবমিট করার আগেই ব্রাউজারে ভ্যালিডেশন এররগুলো ধরা পড়ে।
🚀 Conclusion of the Section
এই লেকচারের মাধ্যমেই আমাদের ফিল্টারের প্র্যাকটিক্যাল প্রয়োগ এবং UI আপডেটের কাজ শেষ হলো। এই সেকশনে আপনি सीखেছেন:
- 5 ধরণের ফিল্টার (Authorization, Resource, Action, Exception, Result) এবং তাদের কাজ।
- ফিল্টার পাইপলাইনের আর্কিটেকচার এবং শর্ট-সার্কিটিং।
IOrderedFilterদিয়ে কাস্টম সিরিয়াল মেইনটেইন করা।IFilterFactoryদিয়ে ক্লিন কোড লেখা এবং Dependency Injection ব্যবহার করা।
আপনার কোর্স Outline অনুযায়ী পরবর্তী লেকচারে হয়তো আমরা “Configure Services Extension” নিয়ে আলোচনা করব। আপনি রেডি হলে জানাবেন!