হ্যালো হাসিব! কোর্স আউটলাইন অনুযায়ী আমরা এখন একটি সম্পূর্ণ নতুন এবং অত্যন্ত গুরুত্বপূর্ণ সেকশন শুরু করতে যাচ্ছি— Section 10: Partial Views। আগের সেকশনে তুমি Layout Views নিয়ে কাজ করেছো, আর আজকের লেকচার “Creating Partial Views” (Lecture 114)-এ আমরা শিখবো কীভাবে View-এর মধ্যে Reusable HTML কন্টেন্ট তৈরি করতে হয়।
পরবর্তী লেকচারগুলোতে তুমি Partial View-তে ডাটা পাস করা শিখবে, তাই এই বেসিক লেকচারটি খুব ভালোভাবে বোঝা জরুরি।
সারসংক্ষেপ (Quick Revision List)
- Partial View কী: এটি হলো Reusable HTML কোড, যা C#-এর Method বা Function-এর মতো কাজ করে। একবার ডিফাইন করে যেকোনো View-তে যতবার খুশি কল করা যায়।
- Naming Convention: Partial View-এর নামের শুরুতে আন্ডারস্কোর (
_) ব্যবহার করা রিকমেন্ডেড (যেমন:_ListPartialView.cshtml)। - Location: এগুলোকে
Views/Sharedফোল্ডারে রাখলে পুরো প্রজেক্টের যেকোনো জায়গা থেকে অ্যাক্সেস করা যায়। - Invocation Methods (কল করার উপায়):
১.
<partial name="_ListPartialView" />(Tag Helper) ২.@await Html.PartialAsync("_ListPartialView")(HTML Helper) ৩.@{ await Html.RenderPartialAsync("_ListPartialView"); }(HTML Helper) - The ViewImports Fix: Tag Helper কাজ করার জন্য
_ViewImports.cshtmlফাইলে@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpersইমপোর্ট করা বাধ্যতামূলক। - Key Difference:
PartialAsyncকন্টেন্টকে Parent View-তে রিটার্ন করে, আরRenderPartialAsyncকন্টেন্টকে সরাসরি ব্রাউজারে স্ট্রিম (Stream) করে (পারফরম্যান্সের জন্য ভালো)।
Comprehensive Breakdown
১. Partial View কী এবং কেন ব্যবহার করবো? [Priority: 10/10]
Why: ধরো, তোমার প্রজেক্টে ১০টি আলাদা View আছে। এর মধ্যে ৩টি View-তে একটি সেম ‘List of Cities’ বা ‘Navigation Card’ দেখাতে হবে। তুমি যদি ৩ জায়গায় সেম HTML কোড কপি-পেস্ট করো, তাহলে কোড মেইনটেইন করা কঠিন হবে (এক জায়গায় পরিবর্তন করলে সব জায়গায় করতে হবে)। Concept: এই সমস্যার সমাধানে আমরা ঐ নির্দিষ্ট HTML কোডটুকুকে একটি আলাদা ফাইলে রাখি, যাকে Partial View বলে। এরপর যে View-তে এটি দরকার, সেখানে শুধু Partial View-টিকে কল করে দিই। এটি অনেকটা C#-এর Reusable Function-এর মতো।
২. প্রজেক্ট সেটআপ এবং Layout তৈরি [Priority: 4/10]
লেকচারের শুরুতে একটি বেসিক MVC প্রজেক্ট সেটআপ করা হয়েছে। (যেহেতু তুমি এগুলো আগে থেকেই জানো, তাই সংক্ষেপে দিচ্ছি)।
Program.cs-এAddControllersWithViews()এবংUseStaticFiles()অ্যাড করা হয়েছে।HomeControllerতৈরি করেIndexএবংAboutAction Method যোগ করা হয়েছে।Views/Sharedফোল্ডারে_Layout.cshtmlতৈরি করেViews/_ViewStart.cshtmlএর মাধ্যমে গ্লোবালি অ্যাপ্লাই করা হয়েছে।
৩. Partial View তৈরি করা (Creating the Partial View) [Priority: 10/10]
- কোথায় বানাবো?
Views/Sharedফোল্ডারে। কারণ Shared ফোল্ডারে রাখলে এটি গ্লোবালি অ্যাক্সেসেবল হয়। - নামকরণ: নামের শুরুতে
_(underscore) দেওয়াটা গ্লোবাল স্ট্যান্ডার্ড। লেকচারার এর নাম দিয়েছেন_ListPartialView.cshtml।
Code Implementation (_ListPartialView.cshtml):
<!-- Views/Shared/_ListPartialView.cshtml -->
<div class="list-container">
<h2>List of Cities</h2>
<ul class="list">
<li>New York</li>
<li>London</li>
<li>Dhaka</li>
<li>Tokyo</li>
</ul>
</div>
৪. Partial View ইনভোক (Call) করার ৩টি উপায় [Priority: 10/10]
Partial View তৈরি করার পর, সেটিকে Parent View (যেমন: Index.cshtml বা About.cshtml)-এ রেন্ডার করার ৩টি উপায় আছে।
Way 1: Tag Helper ব্যবহার করে (Modern & Recommended)
ASP.NET Core-এ <partial> নামক একটি Tag Helper আছে।
<!-- Views/Home/Index.cshtml -->
<h2>Welcome to Home Page</h2>
<!-- Invoking Partial View -->
<partial name="_ListPartialView" />
(এখানে .cshtml এক্সটেনশন দেওয়ার প্রয়োজন নেই, ফ্রেমওয়ার্ক নিজে থেকে ধরে নেয়)।
The ViewImports Error & Fix [Priority: 10/10]
লেকচারার যখন প্রথমবার Tag Helper দিয়ে রান করলেন, তখন Partial View-এর কন্টেন্ট ব্রাউজারে দেখায়নি।
Why? কারণ, ASP.NET Core-এ বাই ডিফল্ট Tag Helpers ইমপোর্ট করা থাকে না।
Fix: Views ফোল্ডারে _ViewImports.cshtml নামে একটি ফাইল তৈরি করে নিচের কোডটি লিখতে হবে:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
এটি লেখার পর Tag Helper পুরো অ্যাপ্লিকেশনে কাজ করা শুরু করবে।
Way 2: PartialAsync (HTML Helper) এটি একটি মেথড যা C# কোড ব্লক হিসেবে লিখতে হয়।
<!-- Views/Home/About.cshtml -->
<h2>About Us</h2>
@await Html.PartialAsync("_ListPartialView")
Way 3: RenderPartialAsync (HTML Helper)
এই মেথডটি সরাসরি কোনো ভ্যালু রিটার্ন করে না (void রিটার্ন টাইপ), তাই একে C#-এর কোড ব্লকের (@{ }) ভেতরে স্টেটমেন্ট হিসেবে লিখতে হয়।
<!-- Views/Home/About.cshtml -->
<h2>About Us</h2>
@{
await Html.RenderPartialAsync("_ListPartialView");
}
৫. Interview Question: PartialAsync vs RenderPartialAsync [Priority: 10/10]
এটি ইন্টারভিউয়ের জন্য খুবই গুরুত্বপূর্ণ একটি প্রশ্ন।
PartialAsync(বা<partial>tag helper): এটি Partial View-এর HTML কন্টেন্টকেIHtmlContentহিসেবে Parent View-এর কাছে রিটার্ন করে। Parent View তারপর সেটিকে নিজের কন্টেন্টের সাথে মিলিয়ে রেন্ডার করে। চাইলে এর রিটার্ন ভ্যালু একটি ভ্যারিয়েবলে সেভ করে রাখা যায়।RenderPartialAsync: এটি Parent View-কে কিছু রিটার্ন করে না (এর রিটার্ন টাইপvoid)। এটি Partial View-এর কন্টেন্টকে সরাসরি ব্রাউজারের HTTP Response Stream-এ পাঠিয়ে দেয়।- Conclusion: যেহেতু
RenderPartialAsyncসরাসরি ব্রাউজারে কন্টেন্ট স্ট্রিম করে, তাই লার্জ স্কেল অ্যাপ্লিকেশনে এর Performance ভালো। তবে সিনট্যাক্স ক্লিন রাখার জন্য বর্তমানে Tag Helper (<partial>) সবচেয়ে বেশি ব্যবহৃত হয়।
VS / VS Code Shortcuts (For faster development)
- Create new File/Folder (VS Code): এক্সপ্লোরারে ফোকাস করে
Aচাপলে নতুন ফাইল এবংShift + Aচাপলে নতুন ফোল্ডার তৈরি করার অপশন আসে। - Format Document:
Shift + Alt + F(কোড এলাইন করার জন্য)। - Go to View: Controller-এর Action Method-এর নামের উপর রাইট ক্লিক করে “Go To View” (VS2022) বা
F12(VS Code with C# Dev Kit)।
Best Practices & .NET 10 Context
Best Practices for Partial Views:
- Prefix with Underscore: Partial View-এর নাম সবসময়
_দিয়ে শুরু করবে (যেমন:_ProductCard.cshtml)। এটি দেখলে অন্য ডেভেলপাররা সহজেই বুঝতে পারবে এটি একটি Partial View, কোনো ইন্ডিপেন্ডেন্ট পেজ নয়। - No Business Logic: Partial View-এর ভেতরে কখনো ডাটাবেস কল বা কমপ্লেক্স Business Logic লিখবে না। এটি শুধুমাত্র UI (HTML) রেন্ডার করার জন্য হওয়া উচিত। যদি Business Logic-এর প্রয়োজন হয়, তবে Partial View-এর বদলে View Components ব্যবহার করতে হবে (যা তুমি পরের সেকশনে শিখবে)।
- Use Tag Helpers: HTML Helpers (
Html.PartialAsync)-এর চেয়ে Tag Helper (<partial>) ব্যবহার করা ক্লিন এবং HTML-এর সাথে বেশি মানানসই। তাই সবসময় Tag Helper ব্যবহার করার চেষ্টা করবে।
.NET 10 Context (.NET 10-এ Partial View):
ASP.NET Core 10-এ MVC Partial View-এর কোর মেকানিজম বা সিনট্যাক্সে কোনো পরিবর্তন আসেনি। তুমি .NET 6-এ যেভাবে <partial name="_Name" /> লিখছো, .NET 10-এও ঠিক একইভাবে লিখতে হবে।
তবে .NET 10-এ পারফরম্যান্স অপটিমাইজেশনের কারণে Tag Helper-গুলো ব্যাকএন্ডে আরও ফাস্ট রেন্ডার হয়। মডার্ন .NET 10 প্রোজেক্টে C# ডেভেলপাররা Html.RenderPartialAsync-এর চেয়ে <partial> ট্যাগ হেল্পারকেই ইন্ডাস্ট্রিতে ডিফল্ট স্ট্যান্ডার্ড হিসেবে ধরে নিয়েছে, কারণ এটি রিডযোগ্যতা (Readability) বাড়ায়।
<!-- Modern .NET 10 Standard Practice -->
<partial name="_ListPartialView" />
হাসিব, Partial View-এর বেসিক কনসেপ্ট কি ক্লিয়ার হয়েছে? তুমি রেডি হলে আমরা নেক্সট লেকচার “Partial Views with ViewData”-তে মুভ করতে পারি!