হাসিব, চলো আজকের টপিকটা নিয়ে আলোচনা করি। আউটলাইন অনুযায়ী এটি তোমার কোর্সের ৮৮ নম্বর লেকচার (Section 8: Views - MVC Architecture Pattern)। এই লেকচারে Razor View-তে switch স্টেটমেন্ট কীভাবে কাজ করে, তা নিয়ে আলোচনা করা হয়েছে।

নিচে পুরো লেকচারটির বিস্তারিত ব্রেকডাউন দেওয়া হলো:

📝 Summary (সারসংক্ষেপ)

  • Topic: Razor Views-এ switch স্টেটমেন্টের ব্যবহার।
  • Purpose: একটি ভ্যালুর ওপর ভিত্তি করে বিভিন্ন কন্ডিশনে ভিন্ন ভিন্ন HTML আউটপুট Render করা।
  • Key Concept: C#-এর সাধারণ switch স্টেটমেন্টের মতোই কাজ করে, তবে case-এর ভেতরে সরাসরি HTML কোড লেখা যায়।
  • Best Use Case: যখন কোনো Model-এ Enum বা একাধিক নির্দিষ্ট ভ্যালু থাকে এবং প্রতিটি ভ্যালুর জন্য আলাদা UI/HTML দেখাতে হয়।

📌 Razor Views - Switch Statement [Priority: 7/10]

MVC (Model-View-Controller) প্যাটার্নে View-এর কাজ হলো ইউজারকে ডেটা দেখানো। অনেক সময় আমাদের লজিকের ওপর ভিত্তি করে ভিউ পরিবর্তন করতে হয়। সাধারণ C# কোডের মতোই Razor View (.cshtml)-এ আমরা @switch ব্যবহার করে এই কাজটি খুব সহজেই করতে পারি।

💡 Why? (কেন ব্যবহার করবো?)

ধরে নাও, তোমার অ্যাপ্লিকেশনে ইউজারের Gender (লিঙ্গ) অনুযায়ী আলাদা আলাদা মেসেজ বা ডিজাইন দেখাতে হবে। এখন তুমি চাইলে অনেকগুলো if-else ব্লক লিখতে পারো, কিন্তু ভ্যালু যখন আগে থেকেই নির্দিষ্ট (যেমন- Enum), তখন switch ব্যবহার করা অনেক বেশি ক্লিন এবং রিডেবল (Readable)।

🛠️ Step-by-Step Breakdown ও Code Implementation

লেকচারে দেখানো উদাহরণটি আমরা একটু গুছিয়ে কোডসহ নিচে দেখছি:

ধাপ ১: Enum এবং Model তৈরি করা প্রথমে আমাদের একটি Enum এবং একটি Model ক্লাস লাগবে।

// Models/Person.cs
public enum Gender
{
    Male,
    Female,
    Other
}
 
public class Person
{
    public string Name { get; set; }
    public Gender PersonGender { get; set; }
}
 

ধাপ ২: Razor View-তে Switch এর ব্যবহার এবার .cshtml ফাইলে আমরা একটি Person অবজেক্ট তৈরি করবো এবং তার PersonGender প্রোপার্টির ওপর ভিত্তি করে HTML রেন্ডার করবো। Razor-এ switch লেখার নিয়ম হলো শুরুতে একটি @ (At symbol) দেওয়া।

<!-- Views/Home/Index.cshtml -->
@{
    // লেকচারের সুবিধার্থে এখানে ম্যানুয়ালি ডেটা ইনিশিয়ালাইজ করা হলো
    // (সাধারণত এই ডেটা Controller থেকে আসে)
    var person = new Person 
    { 
        Name = "Hasib", 
        PersonGender = Gender.Male 
    };
}
 
<h3>User Welcome Area</h3>
 
@switch (person.PersonGender)
{
    case Gender.Male:
        <div class="alert alert-primary">
            <p>Welcome, Mr. @person.Name! Here are some men's clothing offers.</p>
        </div>
        break;
 
    case Gender.Female:
        <div class="alert alert-danger">
            <p>Welcome, Ms. @person.Name! Check out our new cosmetics collection.</p>
        </div>
        break;
 
    case Gender.Other:
        <div class="alert alert-info">
            <p>Welcome, @person.Name! Explore our latest products.</p>
        </div>
        break;
 
    default:
        <div class="alert alert-secondary">
            <p>Welcome, @person.Name!</p>
        </div>
        break;
}
 

কীভাবে কাজ করছে?

  • এখানে person.PersonGender-এর ভ্যালু Gender.Male।
  • switch ব্লকটি চেক করবে কোন case-এর সাথে ভ্যালুটি মিলে যায়।
  • যেহেতু প্রথম কন্ডিশনটি মিলে গেছে, তাই এটি “Welcome, Mr. Hasib…” সম্বলিত HTML টুকু রেন্ডার করবে এবং break পেয়ে বেরিয়ে আসবে। অন্য কোনো কন্ডিশন চেক করবে না।
  • যদি কোনো case ম্যাচ না করে, তখন default ব্লকটি এক্সিকিউট হবে (যদিও লেকচারে বলা হয়েছে default ঐচ্ছিক, তবে এটি ব্যবহার করা ভালো প্র্যাকটিস)।

⌨️ Editor Shortcuts

লেকচারের শেষে ইন্সট্রাক্টর জুম আউট (Decrease zoom) করার একটি শর্টকাট ব্যবহার করেছেন।

  • Visual Studio / Visual Studio Code শর্টকাট: কোড এডিটরে জুম আউট করতে Ctrl + - (Control এবং মাইনাস কি) চাপতে হয়।
  • বিকল্প পদ্ধতি: Ctrl চেপে ধরে মাউসের স্ক্রল হুইল নিচের দিকে (Scroll Down) ঘোরালেও জুম আউট হয়। জুম ইন করতে Ctrl + = অথবা Scroll Up করতে হয়।

⭐ Best Practices & Modern Updates (.NET MVC Context)

  1. Keep Views Clean (Fat Controller/Thin View): Razor View-তে খুব বড় switch লজিক লেখা বা অনেক বেশি C# কোড রাখা ভালো প্র্যাকটিস নয়। যদি তোমার switch লজিক অনেক বড় হয়ে যায় (ধরো ২০ লাইনের HTML প্রতিটি case-এ), তবে এই লজিকটি View-তে না রেখে ViewComponent অথবা Partial View-তে নিয়ে যাওয়া উচিত।
  2. Always use Default Case: সবসময় একটি default কেস রাখা উচিত, যাতে ডাটাবেজ থেকে কোনো অপ্রত্যাশিত ভ্যালু আসলে অ্যাপ্লিকেশন ক্র্যাশ না করে বা ব্ল্যাংক (Blank) স্ক্রিন না দেখায়।
  3. Modern C# Update (Switch Expressions): .NET 10 বা আধুনিক C# ভার্সনগুলোতে (C# 8.0 এর পর থেকে) Switch Expressions অনেক জনপ্রিয়। তবে Razor View-তে সরাসরি বড় HTML ব্লক রেন্ডার করার ক্ষেত্রে পুরোনো স্টাইলের switch ই বেশি মানানসই। কিন্তু তুমি যদি Controller থেকে কোনো নির্দিষ্ট স্ট্রিং সেট করে View-তে পাঠাতে চাও, তবে Controller-এ আধুনিক Switch Expression ব্যবহার করতে পারো। যেমন:
// Controller এর ভেতরে Switch Expression এর আধুনিক ব্যবহার
string greetingMessage = person.PersonGender switch
{
    Gender.Male => $"Welcome, Mr. {person.Name}!",
    Gender.Female => $"Welcome, Ms. {person.Name}!",
    _ => $"Welcome, {person.Name}!" // '_' হলো default case
};
 
ViewBag.Message = greetingMessage;
 
 
   এরপর View-তে শুধু @ViewBag.Message লিখে দিলেই হবে। এতে View আরও ক্লিন থাকে।