eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
120 دنبال‌کننده
168 عکس
38 ویدیو
377 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
لاغر_کردن_کنترلرهای_ASP.Net Core.mp3
زمان: حجم: 4.7M
لاغر کردن کنترلر در ASP.Net Core MVC ساخته شده از هوش مصنوعی این متن در قالب یک پادکست آموزشی، به بررسی چالش شلوغی بیش از حد کنترلرها در برنامه‌نویسی ASP.NET Core و راهکارهای رفع آن می‌پردازد. محتوا با استفاده از شباهت‌سازی‌های ملموس مانند مدیریت رستوران و هتل، شش روش کلیدی شامل لایه سرویس، الگوی مدیاتور، ارکستریتور، معماری تمیز، CQRS و فیلترها را برای جداسازی منطق برنامه‌نویسی توضیح می‌دهد. هر یک از این رویکردها با هدف افزایش نظم، تست‌پذیری و نگهداری آسان‌تر کد معرفی شده‌اند تا از تبدیل شدن کنترلرها به واحدهای پیچیده و غیرقابل کنترل جلوگیری شود. در نهایت، منبع تأکید می‌کند که انتخاب هر روش باید بر اساس مقیاس و نیاز اختصاصی پروژه صورت گیرد. این راهنما به توسعه‌دهندگان کمک می‌کند تا با توزیع درست مسئولیت‌ها، ساختار نرم‌افزار خود را بهینه‌سازی کنند.
MyChartShop.zip
حجم: 16.2M
پروژه نمودار حرفه ای ترکیب سی شارپ و جاوااسکریپت
// ۲. داده‌های نمودار قیمت (گرید ۵ تایی) var priceChartData = products .Where(p => p.IsActive) // فقط محصولات فعال .OrderByDescending(p => p.Price) .Take(10) // ۱۰ محصول گران‌قیمت .Select(p => new ChartData { Label = p.Name.Length > 15 ? p.Name.Substring(0, 15) + "..." : p.Name, Value = p.Price, Color = GetRandomColor() }) .ToList(); ## ✅ توضیح کد نمودار قیمت این کد برای نمودار قیمت محصولات در داشبورد استفاده میشه. بیایم خط به خط بررسی کنیم: --- ## 📊 هدف کد: نمایش ۱۰ محصول گران‌قیمت (فقط محصولات فعال) در نمودار --- ## 🔍 توضیح خط به خط: ### ۱. فیلتر محصولات فعال
.Where(p => p.IsActive)
- فقط محصولاتی که فعال هستند (IsActive = true) انتخاب میشن - محصولات غیرفعال تو نمودار نمیان ### ۲. مرتب‌سازی نزولی بر اساس قیمت
.OrderByDescending(p => p.Price)
- محصولات از گران‌ترین به ارزان‌ترین مرتب میشن ### ۳. گرفتن ۱۰ محصول اول
.Take(10)
- فقط ۱۰ محصول اول (گران‌ترین‌ها) انتخاب میشن ### ۴. تبدیل به داده‌های نمودار
.Select(p => new ChartData
{
    Label = p.Name.Length > 15 ? p.Name.Substring(0, 15) + "..." : p.Name,
    Value = p.Price,
    Color = GetRandomColor()
})
- Label: نام محصول (اگه بیش از ۱۵ کاراکتر باشه، برش می‌خوره و ... اضافه میشه) - Value: قیمت محصول - Color: یه رنگ تصادفی برای نمایش در نمودار ### ۵. تبدیل به لیست
.ToList()
- نهایتاً به لیست تبدیل میشه --- ## 📋 خروجی نمونه: فرض کنیم این محصولات رو داریم: | نام محصول | قیمت | فعال | |-----------|------|------| | لپ‌تاپ ایسوس با مشخصات ویژه | ۱۵,۰۰۰,۰۰۰ | ✅ | | گوشی سامسونگ اس۲۳ اولترا | ۱۲,۰۰۰,۰۰۰ | ✅ | | تبلت اپل آیپد پرو | ۱۰,۰۰۰,۰۰۰ | ❌ | | مانیتور گیمینگ ۲۴ اینچ | ۸,۰۰۰,۰۰۰ | ✅ | خروجی کد:
[
    {
        "Label": "لپ‌تاپ ایسوس با...",  // برش خورده
        "Value": 15000000,
        "Color": ""
    },
    {
        "Label": "گوشی سامسونگ اس...",
        "Value": 12000000,
        "Color": ""
    },
    {
        "Label": "مانیتور گیمینگ...",
        "Value": 8000000,
        "Color": ""
    }
]
--- ## 🎯 دلیل این طراحی: 1. فقط محصولات فعال: محصولات غیرفعال نباید تو آمار بیان 2. ۱۰ محصول گران‌قیمت: مهم‌ترین محصولات از نظر ارزش 3. برش نام‌های طولانی: برای نمایش بهتر در نمودار 4. رنگ تصادفی: برای تفکیک visually در نمودار --- ## 📊 نمودار نهایی: این داده‌ها به Chart.js داده میشه و یه نمودار میله‌ای (Bar Chart) با این مشخصات می‌سازه: - محور افقی: نام محصولات - محور عمودی: قیمت (تومان) - هر محصول: یک ستون با رنگ متفاوت --- حالا فهمیدی چرا اینجوری نوشته شده؟ 🚀
## ✅ آموزش جامع Select در LINQ
Select
یکی از مهم‌ترین و پرکاربردترین متدهای LINQ هست. بیا کامل یادش بگیریم: --- ## 📚 فهرست مطالب: 1. Select چیست؟ 2. تفاوت Select و Where 3. انواع Select 4. Select با اشیاء ناشناس (Anonymous) 5. Select با ایندکس 6. SelectMany (تودرتو) 7. مثال‌های واقعی از پروژه‌های MVC --- ## ۱. 🔍 Select چیست؟
Select
مثل دستگاه تبدیل می‌مونه. ورودی می‌گیره، تبدیل می‌کنه، خروجی می‌ده.
// فرض کن این لیست رو داری
List<string> names = new List<string> { "علی", "رضا", "سارا" };

// می‌خوای همه رو به حروف بزرگ تبدیل کنی
var upperNames = names.Select(n => n.ToUpper()).ToList();
// خروجی: ["علی", "رضا", "سارا"] -> ["علی", "رضا", "سارا"]
--- ## ۲. 🔍 تفاوت Select و Where | متد | کاربرد | مثال | |-----|--------|------| | Where | فیلتر کردن (تعداد کم یا زیاد میشه) | products.Where(p => p.Price > 1000) | | Select | تبدیل کردن (تعداد ثابت می‌مونه) | products.Select(p => p.Name) |
var products = GetProducts();

// Where: تعداد کم میشه (فقط گرون‌ها)
var expensiveProducts = products.Where(p => p.Price > 1000000);

// Select: تعداد ثابت، فرم تغییر می‌کنه
var productNames = products.Select(p => p.Name);
var productPrices = products.Select(p => p.Price);
--- ## ۳. 🎯 انواع Select ### نوع ۱: انتخاب یک Property
// فقط نام محصولات
var names = products.Select(p => p.Name).ToList();

// فقط قیمت‌ها
var prices = products.Select(p => p.Price).ToList();
### نوع ۲: تبدیل به نوع دیگر
// تبدیل Product به string
var productInfo = products.Select(p => $"{p.Name} - {p.Price} تومان").ToList();

// تبدیل Product به یک کلاس دیگر
var productViewModels = products.Select(p => new ProductViewModel
{
    ProductName = p.Name,
    DisplayPrice = p.Price.ToString("N0") + " تومان"
}).ToList();
### نوع ۳: محاسبات روی داده
// قیمت با تخفیف
var discountedPrices = products.Select(p => new
{
    p.Name,
    OriginalPrice = p.Price,
    DiscountedPrice = p.Price * 0.9m,  // ۱۰٪ تخفیف
    Tax = p.Price * 0.09m
}).ToList();
--- ## ۴. 📦 Select با اشیاء ناشناس (Anonymous) اینجا بود که کد قبلی رو نوشتیم:
var priceChartData = products
    .Where(p => p.IsActive)
    .OrderByDescending(p => p.Price)
    .Take(10)
    .Select(p => new  // اینجا شیء ناشناس می‌سازیم
    {
        Label = p.Name.Length > 15 ? p.Name.Substring(0, 15) + "..." : p.Name,
        Value = p.Price,
        Color = GetRandomColor()
    })
    .ToList();
چرا شیء ناشناس؟ چون برای نمودار فقط به این ۳ تا فیلد نیاز داریم، نه کل Product. --- ## ۵. 🔢 Select با ایندکس می‌تونیم به شماره آیتم هم دسترسی داشته باشیم:
var productsWithIndex = products.Select((p, index) => new
{
    RowNumber = index + 1,  // شماره ردیف
    p.Name,
    p.Price
}).ToList();

// خروجی:
// { RowNumber = 1, Name = "لپ‌تاپ", Price = 15000000 }
// { RowNumber = 2, Name = "موبایل", Price = 8000000 }
--- ## ۶. 🔗 SelectMany (تودرتو) برای لیست‌های تو در تو:
// فرض کن هر Category چندتا Product داره
public class Category
{
    public string Name { get; set; }
    public List<Product> Products { get; set; }
}

var categories = GetCategories();

// با Select معمولی: می‌شه لیست لیست‌ها
var allProductsList = categories.Select(c => c.Products).ToList();
// خروجی: List<List<Product>>

// با SelectMany: همه محصولات رو یه دونه می‌کنه
var allProducts = categories.SelectMany(c => c.Products).ToList();
// خروجی: List<Product>
--- ## ۷. 💡 مثال‌های واقعی از پروژه MVC ### مثال ۱: برای Dropdown
// تبدیل محصولات به آیتم‌های dropdown
ViewBag.Products = products.Select(p => new SelectListItem
{
    Value = p.Id.ToString(),
    Text = p.Name
}).ToList();
### مثال ۲: برای جدول با فرمت خاص
var tableData = products.Select(p => new
{
    p.Id,
    PersianDate = p.CreatedAt.ToPersianDate(),
    PriceWithCurrency = p.Price.ToString("N0") + " تومان",
    StatusText = p.IsActive ? "فعال" : "غیرفعال",
    StatusClass = p.IsActive ? "success" : "secondary"
}).ToList();
### مثال ۳: برای نمودار (همون کد خودمون)
var chartData = products
    .Where(p => p.IsActive)
    .OrderByDescending(p => p.Price)
    .Take(10)
    .Select(p => new ChartData
    {
        Label = p.Name.Length > 15 ? p.Name.Substring(0, 15) + "..." : p.Name,
        Value = p.Price,
        Color = GetRandomColor()
    })
    .ToList();
--- ## ۸. ⚡️ Select با شرط (Ternary Operator)
var productDisplay = products.Select(p => new
{
    p.Name,
    PriceCategory = p.Price > 1000000 ? "گران" :
                    p.Price > 500000 ? "متوسط" : "ارزان",
    StatusIcon = p.IsActive ? "✅" : "❌",
    StockStatus = p.Stock > 0 ? "موجود" : "ناموجود"
}).ToList();
--- ## ۹. 🎯 Select با چندین شرط
var productAnalysis = products.Select(p => new
{
    p.Name,
    p.Price,
    
    // دسته‌بندی قیمت
    PriceRange = p.Price switch
    {
        > 1000000 => "گران",
        > 500000 => "متوسط",
        > 0 => "ارزان",
        _ => "رایگان"
    },
    
    // وضعیت نمایشی
    DisplayStatus = p.IsActive 
        ? $"<span class='badge bg-success'>{p.Name} فعال</span>" 
        : $"<span class='badge bg-secondary'>{p.Name} غیرفعال</span>",
        
    // محاسبات
    FinalPrice = p.Price * (p.IsActive ? 1 : 0.8m)  // تخفیف برای غیرفعال‌ها
}).ToList();
--- ## ۱۰. 📊 خلاصه و مقایسه | سناریو | کد | خروجی | |--------|-----|--------| | فقط نام‌ها |
Select(p => p.Name)
|
["لپ‌تاپ", "موبایل"]
| | شیء جدید |
Select(p => new { p.Name, p.Price })
|
[{ Name="لپ‌تاپ", Price=15000 }]
| | با ایندکس |
Select((p,i) => new { Row=i+1, p.Name })
|
[{ Row=1, Name="لپ‌تاپ" }]
| | محاسباتی |
Select(p => p.Price * 0.9)
|
[13500, 7200]
| | شرطی |
Select(p => p.IsActive ? "فعال" : "غیرفعال")
|
["فعال", "غیرفعال"]
| --- ## ✅ نکات طلایی Select: 1. تعداد آیتم‌ها عوض نمی‌شه (برخلاف Where) 2. نوع خروجی می‌تونه متفاوت باشه 3. برای تبدیل داده به فرمت دیگه عالیه 4. می‌تونی Property‌های محاسباتی بسازی 5. در EF Core به SQL بهینه تبدیل می‌شه --- حالا Select برات واضح شد؟ 🚀
MyValidationShop.zip
حجم: 16.1M
پروژه اعتبار سنجی سمت سرور و کلاینت
MyPartialShop.zip
حجم: 16M
پروژه MyPartialShop یک فروشگاه اینترنتی ساده با ASP.NET Core MVC است که از Partial View برای افزایش قابلیت استفاده مجدد کد استفاده می‌کند.
## ✅ پروژه MyPartialShop - فروشگاه با Partial View سلام! این یک پروژه آموزشی ASP.NET Core MVC هست که توش یاد می‌گیریم چطور با Partial View کار کنیم. --- ## 📋 خلاصه پروژه: | عنوان | توضیح | |-------|-------| | نام پروژه | MyPartialShop | | نوع پروژه | فروشگاه اینترنتی ساده | | تکنولوژی | ASP.NET Core MVC 8 | | دیتابیس | SQL Server (LocalDB) | | ویژگی خاص | استفاده از Partial View برای فرم محصول | --- ## 🎯 هدف پروژه: یاد بگیریم چطور: 1. ✅ Partial View بسازیم و استفاده کنیم 2. ✅ یک فرم رو هم برای ایجاد و هم برای ویرایش استفاده کنیم 3. ✅ CRUD کامل (ایجاد، خواندن، ویرایش، حذف) پیاده‌سازی کنیم 4. ✅ با Entity Framework Core کار کنیم 5. ✅ اعتبارسنجی سمت سرور و کلاینت داشته باشیم --- ## 📁 ساختار پروژه:
MyPartialShop/
│
├── 📁 Models/
│   └── Product.cs                 // مدل محصول
│
├── 📁 Data/
│   └── ApplicationDbContext.cs    // اتصال به دیتابیس
│
├── 📁 Controllers/
│   └── ProductController.cs        // کنترلر محصولات
│
├── 📁 Views/
│   ├── 📁 Product/
│   │   ├── Index.cshtml            // لیست محصولات
│   │   ├── Create.cshtml            // صفحه ایجاد
│   │   ├── Edit.cshtml              // صفحه ویرایش
│   │   ├── Details.cshtml           // جزئیات محصول
│   │   └── _ProductForm.cshtml      // ✅ Partial View فرم
│   │
│   └── 📁 Shared/
│       └── _Alert.cshtml            // ✅ Partial View پیغام
│
└── 📁 wwwroot/                      // فایل‌های استاتیک
--- ## 💡 Partial View چیست؟ Partial View مثل یک تکه کد جداشده است که می‌تونی چند جا ازش استفاده کنی. مثال: در این پروژه: -
_ProductForm.cshtml
هم در صفحه Create و هم در صفحه Edit استفاده می‌شه -
_Alert.cshtml
در همه صفحات برای نمایش پیغام استفاده می‌شه --- ## 🔄 جریان کار برنامه: ### 1️⃣ صفحه اصلی (Index) - لیست همه محصولات رو نشون میده - دکمه‌های عملیات (جزئیات، ویرایش، حذف) داره - پیغام‌های موفقیت رو با Partial View نشون میده ### 2️⃣ ایجاد محصول (Create) - فرم رو با Partial View نشون میده - بعد از ذخیره، به صفحه اصلی برمی‌گرده ### 3️⃣ ویرایش محصول (Edit) - همین فرم رو با داده‌های پر شده نشون میده - Partial View خودش تشخیص میده در حالت ویرایش هست یا ایجاد ### 4️⃣ جزئیات محصول (Details) - اطلاعات کامل محصول رو نشون میده ### 5️⃣ حذف محصول (Delete) - با کلیک روی دکمه حذف، محصول پاک میشه --- ## 🎨 ویژگی‌های ظاهری: - استفاده از Bootstrap 5 برای طراحی زیبا - آیکن‌های سیستمی (🔍 ✏️ 🗑 ➕) - رنگ‌بندی مناسب برای دکمه‌ها - ریسپانسیو (مناسب برای موبایل و تبلت) --- ## 🛠 تکنولوژی‌های استفاده شده: | تکنولوژی | کاربرد | |----------|--------| | ASP.NET Core MVC 8 | فریمورک اصلی | | Entity Framework Core | کار با دیتابیس | | SQL Server LocalDB | دیتابیس | | Bootstrap 5 | ظاهر و استایل | | jQuery Validation | اعتبارسنجی سمت کلاینت | | LINQ | کوئری‌نویسی | --- ## ✅ مزایای این پروژه: 1. کد تمیز - با استفاده از Partial View 2. قابلیت استفاده مجدد - فرم مشترک برای Create و Edit 3. آموزشی - مناسب برای مبتدی‌ها 4. کامل - همه عملیات CRUD رو داره 5. حرفه‌ای - با اعتبارسنجی و پیغام‌های کاربرپسند --- ## 📝 نکات مهم برای یادگیری: ### 🔸 تشخیص حالت در Partial View:
@{
    bool isEdit = Model.Id > 0;  // اگه Id داشته باشه، یعنی در حال ویرایشیم
    string formAction = isEdit ? "Edit" : "Create";
}
### 🔸 استفاده از TempData برای پیغام:
TempData["Success"] = "محصول با موفقیت ایجاد شد";
### 🔸 اعتبارسنجی با Data Annotations:
[Required(ErrorMessage = "نام محصول الزامی است")]
[Range(1000, 100000000)]
--- ## 🚀 چطور اجرا کنیم؟ 1. پروژه رو با Visual Studio 2022 باز کن 2. در Package Manager Console دستورات رو بزن:
Add-Migration InitialCreate
Update-Database
3. F5 بزن و اجرا کن --- ## 📸 صفحات پروژه: ### صفحه اصلی (Index) - لیست همه محصولات - دکمه ایجاد محصول جدید - دکمه‌های عملیات روی هر محصول ### صفحه ایجاد (Create) - فرم ورود اطلاعات - دکمه ذخیره ### صفحه ویرایش (Edit) - فرم پر شده با اطلاعات فعلی - دکمه ذخیره تغییرات - منطقه خطر برای حذف ### صفحه جزئیات (Details) - نمایش کامل اطلاعات محصول --- ## 💡 چیزهایی که یاد می‌گیری: ✅ Partial View چیه و چطور استفاده میشه ✅ چطور یه فرم رو برای دو حالت مختلف استفاده کنیم ✅ کار با Entity Framework Core ✅ اعتبارسنجی سمت سرور و کلاینت ✅ نمایش پیغام‌های کاربرپسند با TempData ✅ عملیات CRUD کامل ✅ طراحی با Bootstrap ---
## 🎁 کدهای اصلی پروژه: ### مدل Product:
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public string Description { get; set; }
    public bool IsActive { get; set; }
    public DateTime CreatedAt { get; set; }
    public DateTime? UpdatedAt { get; set; }
}
### Partial View فرم: @model Product @{ bool isEdit = Model.Id > 0; } <form asp-action="@(isEdit ? "Edit" : "Create")"> <!-- فیلدهای فرم --> </form> --- ## ✅ نتیجه: این پروژه یک نمونه عالی برای یادگیری ASP.NET Core MVC و Partial View هست. با خیال راحت می‌تونی ازش برای یادگیری یا تدریس استفاده کنی. موفق باشی! 🚀
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه enum
## ✅ آموزش کامل Enum در پروژه MyEnumShop --- ## 📚 Enum چیست؟ Enum یا Enumerator یک نوع داده در سی‌شارپ است که مجموعه‌ای از ثابت‌های نام‌گذاری شده را تعریف می‌کند. به زبان ساده: Enum راهی برای گروه‌بندی مقادیر مرتبط با نام‌های معنادار است. --- ## 🎯 مثال ساده:
// بدون Enum
string orderStatus = "pending";  // غلط‌نویسی: "pendin" یا "PENDING"

// با Enum
OrderStatus status = OrderStatus.Pending;  // همیشه درست و مشخص
--- ## 📋 دو Enum در پروژه MyEnumShop: ### ۱. OrderStatus.cs (برای وضعیت سفارش)
public enum OrderStatus
{
    [Display(Name = "در انتظار تایید")]
    Pending = 1,
    
    [Display(Name = "تایید شده")]
    Confirmed = 2,
    
    [Display(Name = "در حال پردازش")]
    Processing = 3,
    
    [Display(Name = "ارسال شده")]
    Shipped = 4,
    
    [Display(Name = "تحویل شده")]
    Delivered = 5,
    
    [Display(Name = "لغو شده")]
    Cancelled = 6,
    
    [Display(Name = "عودت داده شده")]
    Returned = 7
}
### ۲. OperationType.cs (برای نوع عملیات)
public enum OperationType
{
    [Display(Name = "➕ ایجاد محصول جدید")]
    Create = 1,
    
    [Display(Name = "✏️ ویرایش محصول")]
    Edit = 2,
    
    [Display(Name = "🔍 مشاهده جزئیات")]
    Details = 3,
    
    [Display(Name = "🗑 حذف محصول")]
    Delete = 4,
    
    [Display(Name = "📋 نمایش لیست")]
    List = 5,
    
    [Display(Name = "📊 نمایش داشبورد")]
    Dashboard = 6
}
--- ## 🎨 مزایای استفاده از Enum: ### ۱. خوانایی کد
// بد
if (product.Status == 2) { }

// خوب
if (product.Status == OrderStatus.Confirmed) { }
### ۲. امنیت در مقابل خطا
// این خطا میده (عدد 8 تعریف نشده)
OrderStatus invalid = (OrderStatus)8;

// همیشه مقادیر معتبر
OrderStatus valid = OrderStatus.Pending;
### ۳. اتمام خودکار در IDE وقتی تایپ می‌کنی `OrderStatus.`، همه گزینه‌ها رو نشون میده. ### ۴. قابلیت نمایش نام فارسی با
[Display(Name = "...")]
می‌تونیم نام فارسی به هر مقدار بدیم. --- ## 🔧 متد کمکی برای نمایش نام فارسی:
public static string GetEnumDisplayName(Enum value)
{
    return value.GetType()
        .GetField(value.ToString())
        ?.GetCustomAttributes(typeof(DisplayAttribute), false)
        .FirstOrDefault() is DisplayAttribute displayAttribute
        ? displayAttribute.Name
        : value.ToString();
}

// استفاده
string statusName = GetEnumDisplayName(OrderStatus.Pending);
// خروجی: "در انتظار تایید"
--- ## 📊 جایگاه Enum در پروژه: ### در Model (Product.cs):
public class Product
{
    // ...
    public OrderStatus Status { get; set; } = OrderStatus.Pending;
    public OperationType? LastOperation { get; set; }
    // ...
}
### در ViewModel (ProductViewModel.cs):
public class ProductViewModel
{
    // ...
    public OrderStatus Status { get; set; }
    public string StatusDisplay { get; set; }
    public string StatusBadge { get; set; }
    // ...
}
### در سرویس (ProductService.cs):
public async Task<Dictionary<OrderStatus, int>> GetOrderStatusStatisticsAsync()
{
    var products = await _context.Products.ToListAsync();
    return products
        .GroupBy(p => p.Status)
        .ToDictionary(g => g.Key, g => g.Count());
}
### در کنترلر (ProductController.cs):
public async Task<IActionResult> Index(OrderStatus? statusFilter = null)
{
    ViewBag.OrderStatusList = Enum.GetValues(typeof(OrderStatus))
        .Cast<OrderStatus>()
        .Select(s => new SelectListItem
        {
            Value = ((int)s).ToString(),
            Text = GetEnumDisplayName(s)
        }).ToList();
    // ...
}
### در ویو (Index.cshtml):
<select name="statusFilter">
    @foreach (var status in ViewBag.OrderStatusList)
    {
        <option value="@status.Value">@status.Text</option>
    }
</select>

<!-- نمایش با badge رنگی -->
<span class="badge @item.StatusBadge">@item.StatusDisplay</span>
--- ## 🎯 کاربردهای Enum در پروژه: ### ۱. فیلتر بر اساس وضعیت
// دریافت محصولات با وضعیت خاص
var pendingProducts = await _productService
    .GetProductsByStatusAsync(OrderStatus.Pending);
### ۲. آمار وضعیت‌ها
var stats = await _productService.GetOrderStatusStatisticsAsync();
// stats["Pending"] = 5, stats["Confirmed"] = 3, ...
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه enum
### ۳. تغییر وضعیت با Dropdown
<select asp-for="Status" asp-items="Html.GetEnumSelectList<OrderStatus>()">
### ۴. ثبت نوع عملیات product.LastOperation = OperationType.Edit; --- ## 📊 مقایسه Enum با روش‌های دیگر: | ویژگی | Enum | const string | int | |-------|------|--------------|-----| | خوانایی | ✅ عالی | ✅ خوب | ❌ بد | | امنیت | ✅ بالا | ❌ خطای تایپی | ❌ مقادیر نامعتبر | | اتمام خودکار | ✅ دارد | ❌ ندارد | ❌ ندارد | | نام فارسی | ✅ دارد | ✅ دارد | ❌ ندارد | | ذخیره در دیتابیس | ✅ عدد | ❌ رشته | ✅ عدد | --- ## 💡 نکات پیشرفته: ### ۱. پرچم‌گذاری (Flags) برای ترکیب وضعیت‌ها
[Flags]
public enum Permissions
{
    Read = 1,
    Write = 2,
    Delete = 4,
    All = Read | Write | Delete  // 7
}
### ۲. تبدیل Enum به SelectListItem
var selectList = Enum.GetValues(typeof(OrderStatus))
    .Cast<OrderStatus>()
    .Select(s => new SelectListItem
    {
        Value = ((int)s).ToString(),
        Text = s.GetDisplayName()
    });
### ۳. اعتبارسنجی Enum در Model
[Required]
[EnumDataType(typeof(OrderStatus))]
public OrderStatus Status { get; set; }
--- ## ✅ خلاصه: | سوال | جواب | |------|------| | Enum چیست؟ | مجموعه‌ای از ثابت‌های نام‌گذاری شده | | چرا استفاده می‌کنیم؟ | برای خوانایی و امنیت بیشتر کد | | در پروژه چند Enum داریم؟ | ۲ تا: OrderStatus و OperationType | | کاربرد اول؟ | وضعیت سفارش (در انتظار، تایید شده، ...) | | کاربرد دوم؟ | نوع عملیات (ایجاد، ویرایش، حذف، ...) | | چطور نام فارسی نشون می‌دیم؟ | با Display Attribute | --- Enum یکی از قدرتمندترین ابزارهای سی‌شارپ برای نوشتن کد تمیز و خواناست! 🚀