پروژه 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 کراد بدونه رفرش
این پروژه نمایش 12 خطای پیدا نشد 404 و آیکون را هم به پروژه اضافه کنید
برای پیادهسازی این سناریو در ویوی
Index، ما باید یک حلقه
forایجاد کنیم که ۴۰۵ دکمه تولید کند. هر دکمه باید به اکشن
HandleErrorدر کنترلر
Errorلینک شود و شماره مربوط به خود را ارسال نماید. در ادامه کد کامل ویو (View) و کنترلر (Controller) آورده شده است: ### ۱. کد کنترلر (ErrorController.cs) این کنترلر شامل اکشنی است که شماره را دریافت کرده و نام ویو را به صورت پویا انتخاب میکند. csharp using Microsoft.AspNetCore.Mvc; namespace MyProject.Controllers { public class ErrorController : Controller { // این اکشن نام ویو را بر اساس شماره ورودی برمیگرداند public IActionResult HandleError(int id) { // ساخت نام ویو (مثلاً اگر id=32 باشد، viewName میشود "Action32") string viewName = $"Action{id}"; // بررسی میکنیم که آیا فایل ویو وجود دارد یا خیر تا خطا ندهد var result = ViewEngine.FindView(ControllerContext, viewName, isMainPage: false); if (result.Success) { return View(viewName); } else { // اگر ویو وجود نداشت، به صفحه ۴۰۴ اصلی برگردان return View("Action404"); } } } } ### ۲. کد ویو (Index.cshtml) در این ویو، یک حلقه از ۱ تا ۴۰۵ اجرا میشود و برای هر عدد یک دکمه (Tag Anchor) ساخته میشود که به اکشن بالا لینک دارد. html @{ ViewData["Title"] = "صفحه اصلی"; } <div class="text-center"> <h1 class="display-4">لیست دکمههای اکشن</h1> <p>برای مشاهده هر ویو روی دکمه مربوطه کلیک کنید:</p> <div class="button-container"> @* حلقه برای تولید ۴۰۵ دکمه *@ @for (int i = 1; i <= 405; i++) { // استفاده از Tag Helper برای ساخت لینک به اکشن HandleError در کنترلر Error // مقدار i به عنوان پارامتر id ارسال میشود <a asp-controller="Error" asp-action="HandleError" asp-route-id="@i" class="btn btn-primary m-1"> اکشن @i </a> } </div> </div> ### نکات مهم: ۱. تعداد دکمهها: همانطور که خواستید، حلقه تا ۴۰۵ ادامه دارد. ۲. لینکدهی: از
asp-controller="Error"و
asp-action="HandleError"استفاده شده است تا وقتی روی دکمه ۳۲ کلیک میشود، آدرس
/Error/HandleError?id=32اجرا شود. ۳. نامگذاری ویوها: فرض بر این است که شما در پوشه
Views/Errorفایلهایی با نامهای Action1.cshtml، Action2.cshtml و ... Action404.cshtml و Action405.cshtml را ایجاد کردهاید. اگر فایل Action32.cshtml وجود نداشته باشد، کنترلر به طور خودکار کاربر را به
Action404هدایت میکند.