## 🎁 کدهای اصلی پروژه:
### مدل 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 یکی از قدرتمندترین ابزارهای سیشارپ برای نوشتن کد تمیز و خواناست! 🚀3.9M حجم رسانه بالاست
مشاهده در ایتا
نصب کتابخانه آفلاین به شرطی قبلاً نصب کرده بودی.
CookieApp.zip
حجم:
2.6M
این کد یک کنترلر (Controller) در فریمورک ASP.NET Core است که برای مدیریت کوکیها (Cookies) استفاده میشود. این پروژه عملیات اصلی ایجاد (CRUD) روی کوکیها را انجام میدهد. در ادامه جزئیات بخشهای مختلف کد را توضیح میدهم:
### ۱. ساختار کلی و دادهها
* فضای نام (Namespace): CookieApp.Controllers نشان میدهد که این کد مربوط به لایه کنترلر برنامه است.
* **لیست موقت (
_cookies):** از آنجا که کوکیها در مرورگر کاربر ذخیره میشوند و سرور دسترسی مستقیم به لیست تمام کوکیهای ذخیره شده ندارد (مگر آنهایی که با هر درخواست ارسال میشوند)، یک لیست استاتیک
_cookiesایجاد شده تا وضعیت کوکیها را در حافظه سرور نگه دارد و بتوانیم آنها را در View نمایش دهیم. (در برنامههای واقعی به جای لیست استاتیک باید از دیتابیس استفاده کرد). ### ۲. اکشن متدها (Action Methods) #### متد
Index(نمایش لیست) * این متد با متد
GetAllCookies()فراخوانی میشود. *
GetAllCookiesدو کار انجام میدهد: ۱. کوکیهای موجود در لیست حافظه (
_cookies) را بررسی میکند و مقدار واقعی آنها را از Request.Cookies میخواند. ۲. تمام کوکیهای ارسال شده توسط مرورگر را میخواند و اگر در لیست نباشند، به آنها اضافه میکند. * در نهایت لیست به View بازگردانده میشود. #### متدهای
Create(ایجاد کوکی) * نسخه GET: فقط یک View خالی برای فرم ایجاد برمیگرداند. * نسخه POST: اطلاعات فرم را دریافت میکند. * اعتبارسنجی: با استفاده از
IsValidNameو
IsValidValueچک میکند که نام و مقدار کوکی فقط شامل حروف انگلیسی و اعداد باشد. * تنظیمات: یک شیء
CookieOptionsساخته میشود که تاریخ انقضا، امنیت (Https) و سایر تنظیمات را مشخص میکند. * ذخیره: با استفاده از Response.Cookies.Append کوکی در مرورگر کاربر ایجاد میشود و همزمان در لیست
_cookiesثبت میشود. #### متدهای
Edit(ویرایش کوکی) * کوکیها به صورت مستقیم قابل ویرایش نیستند. بنابراین این متد ابتدا کوکی قدیمی را با Response.Cookies.Delete حذف میکند. * سپس یک کوکی جدید با همان نام اما مقادیر و تاریخ انقضای جدید ایجاد میکند. * اطلاعات در لیست
_cookiesنیز بهروزرسانی میشوند. #### متدهای
Delete(حذف کوکی) * کوکی مورد نظر را از لیست پیدا میکند. * با استفاده از Response.Cookies.Delete آن را از مرورگر حذف میکند. * همچنین از لیست حافظه سرور (
_cookies) نیز پاک میکند. #### متد
Details(مشاهده جزئیات) * اطلاعات یک کوکی خاص را نمایش میدهد. * علاوه بر اطلاعات ذخیره شده در لیست، مقدار واقعی فعلی کوکی را از Request.Cookies میخواند و در
ViewBagقرار میدهد تا کاربر ببیند آیا کوکی منقضی شده است یا خیر. ### ۳. نکات فنی و امنیتی * **
HttpOnly = true:** این تنظیم باعث میشود اسکریپتهای سمت کلاینت (JavaScript) نتوانند به محتوای کوکی دسترسی داشته باشند، که امنیت را در برابر حملات XSS افزایش میدهد. * **
Secure = Request.IsHttps:** اگر درخواست HTTPS باشد، کوکی فقط از طریق کانال امن منتقل میشود. * **
ValidateAntiForgeryToken:** از حملات CSRF (جعل درخواست بین سایتی) جلوگیری میکند. ### ۴. جمعبندی این کد یک رابط کاربری مدیریتی ساده برای کار با کوکیها فراهم میکند. اگرچه از لیست استاتیک استفاده شده که برای محیطهای Production (تولید) مناسب نیست (چون با ریستارت سرور پاک میشود و در سرورهای چند هستهای مشکلساز میشود)، اما برای یادگیری و تست نحوه کار با Response.Cookies و Request.Cookies بسیار مناسب است.
🚀 نقشه راه جامع و صددرصدی فولاستک ASP.NET Core 🚀
📊 سطح ۱: مقدماتی - بنا نهادن ستونهای استوار
💻 سیشارپ (C# Basics)
• 🏗️ ساختار برنامه، متغیرها و انواع داده
• ➕ عملگرها، شرطها و حلقهها
• 📚 آرایهها و کالکشنها (Lists, Dictionaries)
• 🧱 شیگرایی (OOP): کلاس، شی، وراثت، پلیمورفیسم
🌐 وب (HTML & CSS Basics)
• 📄 ساختار سند HTML5 (تگهای معنایی)
• 🎨 مقدمات CSS3: انتخابگرها، رنگها، فونتها
• 📦 مدل باکس (Box Model) و نمایش (Display)
• 📱 فلسفه طراحی واکنشگرا (Responsive Design) و مدیا کوئریها
⚡ جاوااسکریپت (JavaScript Fundamentals)
• 🔤 متغیرها (var, let, const) و انواع داده
• ⚙️ توابع و Arrow Functions
• 🖱️ کار با DOM (انتخاب عناصر، تغییر محتوا و استایل)
• 🔘 رویدادها (Events) مثل click و submit
🌍 مبانی وب و پروتکل HTTP (Web Fundamentals)
• 🔄 درک معماری کلاینت-سرور
• 📨 مفاهیم کلیدی HTTP: Methodها، Status Codeها
• 📡 ساختار درخواست و پاسخ (Request/Response)
• 🍪 آشنایی با Session و Cookie
📌 کنترل نسخه (Version Control)
• 📂 مفاهیم پایه Git: مخزن، کامیت، شاخه
• ⌨️ کار با دستورات ضروری: clone, add, commit, push, pull
• 🐙 ایجاد حساب در GitHub/GitLab
🎯 ASP.NET Core MVC (شروع)
• 🛠️ نصب محیط (Visual Studio / VS Code)
• 📁 ساختار پروژه و پوشهها
• 👨💻 ایجاد اولین Controller و View
• 📤 ارسال داده از Controller به View
------------------------------------------------------------------
📈 سطح ۲: متوسط - پویایی و زیبایی
💻 سیشارپ (Intermediate C#)
• 🔍 کار با LINQ برای پردازش دادهها
• 🧰 Generic Collections و Interfaces
• ⚠️ مدیریت خطاها (Exception Handling)
• ⏳ برنامهنویسی Asynchronous (async/await)
🎨 وب (Bootstrap Framework)
• 📦 نصب و پیکربندی Bootstrap
• 📐 سیستم Grid برای چیدمان
• 🧩 کامپوننتها: Navbar, Cards, Modals, Alerts
• 📝 فرمها و اعتبارسنجی ظاهری
⚡ جاوااسکریپت (Intermediate JS)
• 🔄 Callbacks, Promises و Async/Await
• 📊 کار با JSON و Fetch API
• 🌳 مدیریت DOM پیشرفته و Event Bubbling
• ✨ ES6+ Features
🗄️ پایگاه داده (Database Foundations)
• 📐 اصول طراحی: نرمالسازی و روابط
• 🎛️ آشنایی با SQL Server و SSMS
• ✍️ کوئریهای SQL: SELECT, INSERT, UPDATE, DELETE
• ⚡ آشنایی با ایندکس (Index)
🎯 ASP.NET Core MVC (Core Development)
• 📋 مدلها و Data Annotations
• 🔗 Entity Framework Core: Code-First، Migration
• 🏷️ تگهای کمکی (Tag Helpers)
• 📝 ایجاد فرمها و پردازش (GET & POST)
• ✅ اعتبارسنجی سمت سرور و کلاینت
-------------------------------------------------------------------
🔥 سطح ۳: پیشرفته - حرفهای شدن
💻 سیشارپ (Advanced C#)
• 🧬 برنامهنویسی جنریک پیشرفته
• 📢 Delegates, Events و Lambda Expressions
• ⚡ LINQ to Entities و بهینهسازی کوئریها
• 🏗️ الگوهای طراحی (Repository, Singleton)
🗄️ پایگاه داده (Advanced Database)
• 🔧 بهینهسازی کوئریهای LINQ
• 📦 آشنایی با Stored Procedure و View
• 🔄 مدیریت تراکنشها (Transactions)
🛠️ ابزارهای توسعه (Developer Tools)
• 🔍 ابزار توسعهدهندگان مرورگر (F12)
• 📬 کار با Postman برای تست API
🔒 امنیت (Security Deep Dive)
• 🔐 احراز هویت دو مرحلهای (2FA)
• 🔑 JWT در مقابل Cookie-based
• 🚦 Rate Limiting
⚡ جاوااسکریپت (Modern JS & Libraries)
• ⚛️ آشنایی با React/Vue.js
• 📦 مدیریت پکیجها با npm/yarn
• 🛠️ کتابخانههای کاربردی (SweetAlert2, DataTables)
🎯 ASP.NET Core MVC (Advanced Server-Side)
• 💉 تزریق وابستگی (Dependency Injection)
• 🎛️ فیلترها (Filters) و Middlewareها
• 🛡️ Authentication و Authorization (Identity)
• 🛡️ محافظت در برابر CSRF و XSS
• 🌐 ایجاد Web API های RESTful
🔄 تعامل سرور و کلاینت (AJAX Integration)
• 📡 استفاده از fetch یا jQuery.ajax
• 🔄 بهروزرسانی Partial Views با AJAX
• ⚠️ مدیریت خطاهای سمت کلاینت
-------------------------------------------------------------------
👑 سطح ۴: کارشناسی - معماری و مقیاسپذیری
🏗️ معماری نرمافزار (Architecture)
• ✨ معماری تمیز (Clean Architecture) و DDD
• 📋 الگوی CQRS با MediatR
• 🧩 میکروسرویسها (Microservices)
• 📨 طراحی Event-Driven با RabbitMQ
💻 سیشارپ و بهینهسازی (High Performance C#)
• 🧠 مدیریت حافظه و Garbage Collection
• ⚡ استفاده از Span و Memory
• 🔄 برنامهنویسی موازی (Parallel Programming)
• 🔍 Reflection و Emit
🎨 فرانتاند پیشرفته (Advanced Frontend)
• 🧩 ساخت کامپوننتهای پیشرفته
• 📊 مدیریت State پیچیده
• ⚡ بهینهسازی Core Web Vitals
• 📱 Progressive Web Apps (PWA)
🎯 ASP.NET Core MVC (Expert Server-Side)
• 💬 SignalR برای ارتباط بلادرنگ
• 🚀 کشینگ پیشرفته با Redis
• 💓 Health Checks و مانیتورینگ
• ✍️ Middleware سفارشی
🧪 تست نرمافزار (Testing & QA)
• 🧪 تست واحد (Unit Testing) با xUnit
• 🔗 تست یکپارچگی (Integration Testing)
• 🌐 تست فرانتاند با Jest/Selenium
🚀 DevOps و استقرار (DevOps & Deployment)
• 🐳 کانتینریسازی با Docker
• ☸️ اورکستریشن با Kubernetes
• 🔄 CI/CD با GitHub Actions
• 🖥️ استقرار روی Linux (Nginx) و IIS
--------------------------------------------------------------------
💡 پروژههای عملی پیشنهادی
🟢 سطح مقدماتی
📄 صفحه شخصی "درباره من"
HTML + CSS سفارشی + Bootstrap ساده
🟡 سطح متوسط
📝 وبلاگ ساده
EF Core + Layout + اصول SQL
🟠 سطح پیشرفته
🛒 فروشگاه اینترنتی
AJAX + پنل مدیریت + احراز هویت + تست با Postman
🔴 سطح کارشناسی
📊 سیستم مدیریت محتوا (CMS)
معماری تمیز + SignalR + Docker + استقرار ابری
--------------------------------------------------------------------
✨ نکات کلیدی برای موفقیت
• ⏰ روزی ۳-۴ ساعت زمان مفید
• 📝 پروژهمحور یاد بگیرید
• 🤝 در GitHub مشارکت کنید
• 📚 مستندات مایکروسافت را بخوانید
• 🧪 همیشه کدتان را تست کنید
• 🌏 انگلیسی یاد بگیرید
--------------------------------------------------------------------
🎯 جمعبندی
این نقشه راه، یک مسیر ۱۰۰٪ کامل برای تبدیل شدن به یک فولاستک دولوپر حرفهای با ASP.NET Core است. از سطح مقدماتی تا کارشناسی، همه چیز را پوشش داده:
✅ برنامهنویسی C#
✅ طراحی وب (HTML/CSS/JS)
✅ پایگاه داده و SQL
✅ امنیت و ابزارها
✅ معماری و DevOps
✅ پروژههای عملی
--------------------------------------------------------------------
🌟 موفق باشید! راه سختی است، اما شدنی و لذتبخش! 🌟
AjaxCrudProject.zip
حجم:
2.5M
پروژه Ajax کراد بدونه رفرش