پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه انتخاب مهارت
بذار پروژهای که ساختی رو مرحلهبهمرحله توضیح بدم تا دقیقاً معلوم بشه چه بخشهایی داره و چطور کار میکنه. این توضیح رو میتونی بهعنوان معرفی پروژه منتشر کنی:
---
## 📌 معرفی پروژه CRUD مهارتها با RadioButton
### 1. مدل داده (Skill)
- شامل سه فیلد اصلی:
-
Id→ شناسه یکتا برای هر مهارت -
Name→ نام مهارت (مثلاً C#, ASP.NET, JavaScript) -
Level→ سطح مهارت (مبتدی، متوسط، حرفهای) که با RadioButton انتخاب میشود --- ### 2. پایگاه داده (AppDbContext) - از EF Core استفاده میکند. - یک جدول به نام
Skillsساخته میشود که رکوردهای مهارتها را ذخیره میکند. --- ### 3. کنترلر (SkillsController) - عملیاتهای اصلی CRUD را مدیریت میکند: - Index → نمایش لیست همه مهارتها - Details → نمایش جزئیات یک مهارت خاص - Upsert (GET) → یک اکشن مشترک برای افزودن یا ویرایش - اگر
idخالی باشد → فرم افزودن با فیلدهای خالی نمایش داده میشود - اگر
idمقدار داشته باشد → فرم ویرایش با دادههای پر نمایش داده میشود - Upsert (POST) → ذخیره تغییرات - اگر
Id == 0→ رکورد جدید ساخته میشود (Add) - اگر
Id != 0→ رکورد موجود بهروزرسانی میشود (Update) - Delete → حذف یک مهارت --- ### 4. ویوها (Views) - Index.cshtml - لیست همه مهارتها در قالب جدول - ستونها: نام مهارت، سطح مهارت (نمایش فارسی: مبتدی، متوسط، حرفهای)، عملیات (ویرایش، جزئیات، حذف) - Upsert.cshtml - فرم افزودن یا ویرایش مهارت - شامل فیلد نام و RadioButton برای انتخاب سطح مهارت - اگر در حالت افزودن باشد → فیلدها خالی هستند - اگر در حالت ویرایش باشد → فیلدها با دادههای موجود پر میشوند - Details.cshtml - نمایش جزئیات یک مهارت انتخابشده - نام مهارت و سطح آن به صورت فارسی نمایش داده میشود --- ## 🎯 نحوه کار پروژه 1. کاربر وارد صفحهی لیست مهارتها (Index) میشود و همه رکوردها را میبیند. 2. میتواند یک مهارت جدید اضافه کند (Upsert بدون id) و سطح آن را با RadioButton انتخاب کند. 3. میتواند یک مهارت موجود را ویرایش کند (Upsert با id) و سطح جدیدی انتخاب کند. 4. میتواند جزئیات هر مهارت را ببیند (Details). 5. میتواند مهارت را حذف کند (Delete). --- ## ✅ نتیجه این پروژه یک نمونهی کامل و ساده از CRUD با ASP.NET Core MVC است که علاوه بر عملیات پایه، یک ویژگی مهم دارد: - انتخاب سطح مهارت با RadioButton - نمایش سطح مهارت به صورت فارسی در رابط کاربری ---
InterestApp.zip
حجم:
23.2M
پروژه با یک جدول ساخته شده ولی جالب اینجاست که با یک ستون دیتابیس چند داده ذخیره کنید
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه با یک جدول ساخته شده ولی جالب اینجاست که با یک ستون دیتابیس چند داده ذخیره کنید
بذار یک توضیح کامل و آماده برای انتشار دربارهی پروژهای که با یک جدول و CheckBox ساختهای بنویسم. این متن میتونه بهعنوان معرفی پروژه در وبلاگ یا شبکههای اجتماعی استفاده بشه:
---
## 📌 معرفی پروژه CRUD علاقهمندیها با یک جدول و CheckBox
### 🔹 ساختار پروژه
این پروژه با استفاده از ASP.NET Core MVC طراحی شده و هدف آن مدیریت علاقهمندیهای کاربران است. دادهها در یک جدول ساده ذخیره میشوند و کاربر میتواند چند علاقهمندی را همزمان انتخاب کند.
### 🔹 مدل داده
مدل اصلی پروژه شامل یک جدول به نام Interests است که دارای ستونهای زیر میباشد:
-
Id→ شناسه یکتا -
Name→ نام کاربر یا آیتم -
SelectedInterests→ علاقهمندیهای انتخابشده (به صورت رشته ذخیره میشوند، مثلاً
"Music,Sport,Travel") ### 🔹 امکانات پروژه 1. افزودن علاقهمندیها (Create) - کاربر میتواند نام خود را وارد کند. - چند علاقهمندی را با CheckBox انتخاب کند (موسیقی، ورزش، سفر، مطالعه). - انتخابها در ستون
SelectedInterestsذخیره میشوند. 2. ویرایش علاقهمندیها (Edit) - کاربر میتواند رکورد موجود را باز کند. - CheckBoxها بر اساس انتخابهای قبلی پر میشوند (Checked). - تغییرات ذخیره میشوند و رشتهی جدید جایگزین قبلی میشود. 3. نمایش لیست (Index) - همه رکوردها در قالب جدول نمایش داده میشوند. - علاقهمندیها به صورت فارسی و جداشده با "،" نمایش داده میشوند. 4. جزئیات (Details) - نمایش اطلاعات کامل یک رکورد شامل نام و علاقهمندیهای انتخابشده. - علاقهمندیها با نگاشت به فارسی نمایش داده میشوند. 5. حذف (Delete) - امکان حذف رکورد از جدول وجود دارد. --- ### 🔹 نحوه ذخیرهسازی - وقتی کاربر چند CheckBox انتخاب میکند، مقادیر انتخابی در یک رشته با جداکنندهی کاما ذخیره میشوند. - مثال: اگر کاربر موسیقی و سفر را انتخاب کند، در دیتابیس اینطور ذخیره میشود:
Music,Travel- در نمایش (Index و Details)، این رشته به لیست تبدیل شده و با نگاشت به فارسی نمایش داده میشود:
موسیقی، سفر--- ## 🎯 نتیجه این پروژه یک نمونهی ساده و کاربردی از CRUD با یک جدول و CheckBox است که امکانات زیر را فراهم میکند: - مدیریت علاقهمندیها (افزودن، ویرایش، حذف، جزئیات) - انتخاب چند گزینه با CheckBox - ذخیره دادهها در یک ستون رشتهای - نمایش علاقهمندیها به صورت فارسی در لیست و جزئیات --- وقتی پروژه رو معرفی کردی (CRUD علاقهمندیها با یک جدول و CheckBox)، برای بخش ادامه توضیحات میتونی روی دو محور تمرکز کنی: --- ## 🔹 اصولی بودن پروژه - سادگی و آموزشمحور بودن: پروژه با یک جدول ساخته شده تا مفاهیم پایهی CRUD (افزودن، ویرایش، حذف، جزئیات) به شکل ساده و قابل فهم تمرین بشه. - استفاده از CheckBox: این انتخاب باعث میشه کاربر بتونه چند گزینه رو همزمان انتخاب کنه و درک بهتری از نحوهی کار فرمها و ارسال دادهها داشته باشه. - ذخیرهسازی رشتهای: علاقهمندیها در یک ستون رشتهای ذخیره میشن. این روش برای پروژههای آموزشی سریع و ساده است، هرچند در پروژههای بزرگتر محدودیتهایی داره. - نمایش فارسی: دادهها به صورت انگلیسی ذخیره میشن ولی در رابط کاربری به فارسی نمایش داده میشن، که هم استاندارد دیتابیس رعایت میشه و هم تجربه کاربری بهتره. --- ## 🔹 مسیر توسعه و ارتقا - جدول واسط (Many-to-Many): در نسخهی پیشرفته میتونی علاقهمندیها رو در یک جدول جدا ذخیره کنی و با جدول واسط به کاربر وصل کنی. این کار جستجو و گزارشگیری رو خیلی راحتتر میکنه. - مدیریت پویا: علاقهمندیها به جای اینکه ثابت باشن (Music, Sport, Travel)، میتونن از دیتابیس خوانده بشن و کاربر یا مدیر سیستم بتونه گزینههای جدید اضافه کنه. - فیلتر و جستجو: میتونی صفحهای بسازی که کاربرها رو بر اساس علاقهمندیها فیلتر کنه (مثلاً همه کسانی که علاقهمند به ورزش هستن). - رابط کاربری بهتر: استفاده از TagHelper یا Component برای نمایش CheckBoxها به صورت پویا و زیباتر. - اعتبارسنجی و امنیت: اضافه کردن Validation برای اطمینان از اینکه کاربر حتماً یک یا چند علاقهمندی انتخاب کرده و دادهها درست ذخیره میشن. ---
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه با یک جدول ساخته شده ولی جالب اینجاست که با یک ستون دیتابیس چند داده ذخیره کنید
## 🎯 متن آماده برای انتشار
«این پروژه یک نمونهی آموزشی CRUD با ASP.NET Core MVC است که با یک جدول ساده ساخته شده و علاقهمندیهای کاربران را مدیریت میکند. کاربر میتواند چند علاقهمندی را با CheckBox انتخاب کند و دادهها در یک ستون رشتهای ذخیره میشوند. در رابط کاربری، علاقهمندیها به صورت فارسی نمایش داده میشوند. این پروژه برای یادگیری اصولی CRUD و کار با فرمها بسیار مناسب است. در نسخههای توسعهیافته میتوان از جدول واسط برای ذخیرهسازی استاندارد، مدیریت پویا علاقهمندیها، فیلتر و جستجو بر اساس علاقهمندیها و رابط کاربری پیشرفتهتر استفاده کرد.»
بلاخره من موفق شدم ویدئو ضبط کنم و این دفعه اولمه کامل و بدونه صدا ضبط کنم
نمیدونم چرا برای من ویدئو ضبط کردن سخته؟
NameApp2.zip
حجم:
23.3M
لاگ نویسی پروژه فرقی نمیکنه چی باشه این پروژه برای پروژه های بزرگ هم کار میکند
پروژه ASP.Net Core MVC (وب و سی شارپ)
لاگ نویسی پروژه فرقی نمیکنه چی باشه این پروژه برای پروژه های بزرگ هم کار میکند
// مسیر پوشه لاگها را مشخص میکنیم (داخل wwwroot/logs)
var folderPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "logs");
// اگر پوشه وجود نداشت، ساخته میشود
Directory.CreateDirectory(folderPath);
// نام فایل لاگ را با تاریخ و ساعت جاری میسازیم (هر بار اجرا یک فایل جدید)
var logFilePath = Path.Combine(folderPath, $"eflog_{DateTime.Now:yyyyMMdd_HHmmss}.txt");
// فایل را باز میکنیم با اجازهی اشتراکگذاری (FileShare.ReadWrite)
// تا چند پروسه بتوانند همزمان به آن دسترسی داشته باشند
var fileStream = new FileStream(logFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
// یک StreamWriter روی فایل ایجاد میکنیم و AutoFlush را فعال میکنیم
// تا هر خط بلافاصله نوشته شود و نیازی به Close دستی نباشد
var writer = new StreamWriter(fileStream) { AutoFlush = true };
// ثبت DbContext در DI Container (Dependency Injection)
// اینجا EF Core را تنظیم میکنیم تا:
// 1. از ConnectionString موجود در appsettings.json استفاده کند
// 2. SensitiveDataLogging فعال باشد (پارامترهای کوئری هم نمایش داده شوند)
// 3. همهی کوئریها در فایل لاگ نوشته شوند
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))
.EnableSensitiveDataLogging()
.LogTo(writer.WriteLine, LogLevel.Information));
پروژه ASP.Net Core MVC (وب و سی شارپ)
لاگ نویسی پروژه فرقی نمیکنه چی باشه این پروژه برای پروژه های بزرگ هم کار میکند
## 📌 معرفی پروژه لاگنویسی EF Core در پروژه NameApp2
### 🔹 هدف پروژه
این پروژه با استفاده از ASP.NET Core MVC و Entity Framework Core طراحی شده تا تمام کوئریهای اجرا شده توسط EF Core را در فایل متنی ذخیره کند. هدف اصلی، مانیتورینگ و بررسی کوئریها برای یادگیری و تحلیل عملکرد دیتابیس است.
---
### 🔹 ساختار پروژه
- Program
به گونهای تنظیم شده که هنگام اجرای برنامه، یک فایل جدید در مسیر
wwwroot/logsساخته میشود. - نام فایل شامل تاریخ و ساعت اجراست (مثلاً
eflog_20260101_220000.txt). - همهی کوئریهای EF Core در این فایل ثبت میشوند. --- ### 🔹 امکانات پروژه 1. ایجاد فایل لاگ جدید در هر اجرا - هر بار پروژه اجرا شود، یک فایل جدید ساخته میشود. - این فایل شامل تمام کوئریهای SQL تولید شده توسط EF Core است. 2. ذخیره کوئریها با جزئیات کامل - متن کامل کوئریها (SELECT, INSERT, UPDATE, DELETE) ثبت میشود. - با فعال بودن `EnableSensitiveDataLogging`، پارامترهای کوئری نیز نمایش داده میشوند. 3. مدیریت پوشه لاگها - اگر پوشهی
wwwroot/logsوجود نداشته باشد، به صورت خودکار ساخته میشود. - فایلها به صورت مرتب و قابل دسترسی ذخیره میشوند. 4. قابلیت توسعه - میتوان لاگها را به جای فایل، در دیتابیس یا سرویسهای مانیتورینگ (مثل Seq یا ELK) ذخیره کرد. - امکان استفاده از کتابخانههای حرفهای مثل Serilog یا NLog برای مدیریت بهتر لاگها وجود دارد. --- ### 🔹 نمونه کاربرد - بررسی کوئریهای تولید شده توسط EF Core برای یادگیری. - تحلیل عملکرد دیتابیس و پیدا کردن کوئریهای سنگین. - مستندسازی کوئریها برای آموزش یا انتشار. --- ## 🎯 نتیجه این پروژه یک نمونهی ساده و آموزشی است که نشان میدهد چگونه میتوان کوئریهای EF Core را در فایل متنی ذخیره کرد. کاربرد اصلی آن برای یادگیری، مانیتورینگ و تحلیل کوئریها است و میتواند پایهای برای پروژههای بزرگتر با سیستم لاگ حرفهای باشد.
PictureApp.zip
حجم:
23.4M
اینکه دو پروژهی جدا (CRUD تصویر و CRUD فایل) رو در یک پروژه ترکیب کردی، یعنی الان دو کنترلر داری که هر کدوم مسئولیت متفاوتی دارن. بذار مرحلهبهمرحله توضیح بدم:
پروژه ASP.Net Core MVC (وب و سی شارپ)
اینکه دو پروژهی جدا (CRUD تصویر و CRUD فایل) رو در یک پروژه ترکیب کردی، یعنی الان دو کنترلر داری که
## 🔹 کنترلر اول: PicturesController
این کنترلر مخصوص مدیریت تصاویر هست:
- Index
→ لیست همه تصاویر ذخیرهشده در دیتابیس رو نمایش میده.
- Create (GET/POST)
→ کاربر میتونه یک تصویر آپلود کنه. تصویر در پوشهی
wwwroot/imagesذخیره میشه و مسیرش در دیتابیس ثبت میشه. - Edit (GET/POST) → کاربر میتونه توضیحات تصویر رو تغییر بده یا تصویر جدید جایگزین کنه. اگر تصویر جدید آپلود بشه، تصویر قبلی حذف میشه. - Delete → تصویر از دیتابیس و فایل فیزیکی از پوشه حذف میشه. - نمایش در ویو → تصاویر با
<img src="~/images/...">نمایش داده میشن. 👉 این کنترلر بیشتر برای گالری عکس، پروفایل کاربری یا نمایش بصری استفاده میشه. --- ## 🔹 کنترلر دوم: DocumentsController این کنترلر مخصوص مدیریت فایلهای عمومی (PDF، Word، ZIP و …) هست: - Index → لیست همه فایلها رو نمایش میده همراه با توضیحات. - Create (GET/POST) → کاربر میتونه یک فایل آپلود کنه. فایل در پوشهی
wwwroot/filesذخیره میشه و نام اصلی + مسیر ذخیره در دیتابیس ثبت میشه. - Edit (GET/POST) → کاربر میتونه توضیحات فایل رو تغییر بده یا فایل جدید جایگزین کنه. فایل قبلی حذف و فایل جدید ذخیره میشه. - Download → کاربر میتونه فایل رو دانلود کنه. اینجا کنترلر فایل رو از پوشه میخونه و با متد
File()به کاربر برمیگردونه. - Delete → فایل از دیتابیس و پوشه حذف میشه. 👉 این کنترلر بیشتر برای مدیریت اسناد، فایلهای آموزشی یا دانلودی استفاده میشه. --- ## 🔹 تفاوت اصلی دو کنترلر - PicturesController → تمرکز روی نمایش بصری (
<img>). - DocumentsController → تمرکز روی دانلود فایل (
File()در کنترلر). - هر دو از یک الگو استفاده میکنن: - آپلود → ذخیره در پوشه + ثبت در دیتابیس - ویرایش → تغییر توضیحات یا جایگزینی فایل - حذف → پاک کردن رکورد + فایل فیزیکی --- ## 🎯 جمعبندی الان پروژهات دو بخش داره: - بخش مدیریت تصاویر (نمایش مستقیم در صفحه) - بخش مدیریت فایلها (دانلود توسط کاربر) هر دو کنترلر ساختار مشابه دارن، فقط فرقشون در نوع نمایش خروجی هست: - تصاویر با
<img>نمایش داده میشن. - فایلها با لینک دانلود برگردونده میشن.