پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه کوچک فعال و غیر فعال
🔹 چرا نیازی به Update نداری؟
در EF Core وقتی با Find(id) یک رکورد رو از دیتابیس میگیری:
- شیء برگردانده شده به صورت Tracked (ردیابیشده) داخل DbContext نگهداری میشه.
- یعنی EF Core تغییرات روی اون شیء رو خودش تشخیص میده.
- وقتی مقدار یک خاصیت مثل item.Name یا item.IsActive رو تغییر بدی، EF Core این تغییر رو ثبت میکنه.
- با صدا زدن SaveChanges()، EF Core تغییرات رو به دیتابیس اعمال میکنه.
📌 بنابراین نیازی به نوشتن Update(item) نداری. چون شیء از قبل به کانتکست وصل شده و تغییراتش ردیابی میشه.
---
🔹 توضیح در مورد ModelState
- ModelState
وضعیت اعتبارسنجی دادههای ورودی رو نگه میداره.
- وقتی شما پارامترهایی مثل string name یا یک ViewModel رو به اکشن میفرستی، ASP.NET Core بررسی میکنه که آیا دادهها با قوانین اعتبارسنجی (Validation Attributes) سازگار هستند یا نه.
- اگر هیچ Attribute مثل [Required] یا [StringLength] تعریف نکرده باشی، ModelState.IsValid همیشه true خواهد بود.
- در کدی که نوشتی، چون فقط string name میگیری و هیچ اعتبارسنجی نداری، خطایی رخ نمیده و شرط همیشه درست خواهد بود.
📌 اگر بخوای خطاها رو مدیریت کنی (مثلاً نام خالی نباشه)، میتونی یا:
- از Attribute روی مدل استفاده کنی:
csharp
public class Item {
[Required(ErrorMessage = "نام الزامی است")]
public string Name { get; set; }
public bool IsActive { get; set; }
}
- یا در اکشن شرط بذاری:
csharp if (string.IsNullOrWhiteSpace(name)) { ModelState.AddModelError("Name", "نام الزامی است"); return View(); }--- 🔹 چرا خطا نداری؟ - چون همهی اکشنها ساده هستند و فقط با id یا name کار میکنند. - EF Core تغییرات رو خودش مدیریت میکنه. - ModelState.IsValid بدون اعتبارسنجی همیشه true هست. - بنابراین کد اجرا میشه و خطایی نداری. --- 🎯 جمعبندی - نیازی به Update نداری چون شیء با Find ردیابی میشه و تغییراتش خودکار ذخیره میشن. - ModelState.IsValid در حالت فعلی همیشه true هست چون اعتبارسنجی تعریف نکردی. - خطا نداری چون ورودیها ساده هستند و EF Core تغییرات رو درست مدیریت میکنه.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه کوچک فعال و غیر فعال
🔹 حالت اول: اکشن Edit با مدل کامل
مثال:
csharp
[HttpPost]
public IActionResult Edit(Item model)
{
if (!ModelState.IsValid)
return View(model);
var item = _db.Items.Find(model.Id);
if (item != null)
{
item.Name = model.Name;
_db.SaveChanges();
}
return RedirectToAction("Index");
}
- اینجا نیازی به Update(item) نیست.
- چرا؟ چون رکورد با Find گرفته شده و EF Core آن را Tracked کرده است. تغییر مستقیم روی item.Name کافی است.
---
🔹 حالت دوم: اکشن Edit با پارامترهای جدا (id و name)
مثال:
csharp
[HttpPost]
public IActionResult Edit(int id, string name)
{
var item = _db.Items.Find(id);
if (item != null)
{
item.Name = name;
_db.SaveChanges();
}
return RedirectToAction("Index");
}
- باز هم نیازی به Update(item) نیست.
- چون شیء با Find گرفته شده و EF Core تغییرات را دنبال میکند.
---
🔹 حالت سوم: اکشن Edit با مدل پاس داده شده ولی بدون Find
مثال:
csharp
[HttpPost]
public IActionResult Edit(Item model)
{
_db.Items.Update(model);
_db.SaveChanges();
return RedirectToAction("Index");
}
- اینجا نیاز به Update داری.
- چرا؟ چون شیء model را خودت از فرم گرفتی و EF Core آن را از دیتابیس نیاورده، پس Tracked نیست.
- باید با Update(model) به EF Core بگویی که این شیء تغییر کرده است.
---
🎯 جمعبندی
- اگر رکورد را با Find(id) یا FirstOrDefault از دیتابیس بگیری → نیازی به Update نداری، چون EF Core تغییرات را دنبال میکند.
- اگر رکورد را مستقیم از فرم (مدل پاس داده شده) بگیری و دوباره به دیتابیس وصل نکنی → نیاز به Update داری.
- پس در پروژههای ساده مثل پنجم و ششم، وقتی از Find استفاده میکنی، نیازی به Update نیست.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه انتخاب لیست
کدی که نوشتی یک پروژهی کامل CRUD ساده با ASP.NET Core MVC هست. بذار برات توضیح بدم که دقیقاً این پروژه چه بخشهایی داره و چطور کار میکنه، تا بتونی بهعنوان معرفی یا مستند منتشرش کنی:
---
## 📌 توضیح پروژه
### 1. مدل (Item)
- شامل سه ویژگی اصلی:
-
Name→ نام آیتم -
Options→ گزینه انتخابی (Option1, Option2, Option3) -
IsActive→ وضعیت فعال یا غیرفعال --- ### 2. کنترلر (ItemsController) این کنترلر عملیاتهای CRUD رو مدیریت میکنه: - Index → نمایش لیست همه آیتمها - Details → نمایش جزئیات یک آیتم خاص - Create (GET/POST) → افزودن آیتم جدید با فرم و ذخیره در دیتابیس - Edit (GET/POST) → ویرایش آیتم موجود - Delete (POST) → حذف آیتم 👉 نکته: در اکشنهای Create و Edit، لیست گزینهها (ViewBag.Options) با متن فارسی پر میشه تا کاربر در فرم گزینهها رو فارسی ببینه، ولی مقدار اصلی (Option1, Option2, Option3) در دیتابیس ذخیره میشه. --- ### 3. ویوها (Views) - Index.cshtml - نمایش لیست آیتمها در جدول - ستونها: نام، گزینه انتخابی (با نمایش فارسی)، وضعیت (فعال/غیرفعال)، عملیات (جزئیات، ویرایش، حذف) - Details.cshtml - نمایش جزئیات یک آیتم - نام، گزینه انتخابی (با نگاشت به فارسی از طریق Dictionary)، وضعیت - Create/Edit.cshtml - فرم افزودن یا ویرایش آیتم - شامل فیلد نام، Dropdown گزینهها (با متن فارسی)، و وضعیت فعال/غیرفعال --- ### 4. نحوه کار پروژه 1. کاربر وارد صفحهی لیست آیتمها (Index) میشه و همه رکوردها رو میبینه. 2. میتونه آیتم جدید اضافه کنه (Create)؛ در فرم، گزینهها فارسی نمایش داده میشن. 3. میتونه آیتم موجود رو ویرایش کنه (Edit)؛ دوباره گزینهها فارسی نمایش داده میشن. 4. میتونه جزئیات آیتم رو ببینه (Details)؛ گزینه انتخابی با متن فارسی نمایش داده میشه. 5. میتونه آیتم رو حذف کنه (Delete). --- ## 🎯 جمعبندی این پروژه یک نمونهی آموزشی کامل CRUD هست که علاوه بر عملیات پایه، یک نکتهی مهم داره: - دادهها در دیتابیس به صورت انگلیسی ذخیره میشن (Option1, Option2, Option3). - اما در فرمها و نمایش، کاربر همیشه متن فارسی میبینه (گزینه اول، گزینه دوم، گزینه سوم). این باعث میشه پروژه هم استاندارد باشه (ذخیره مقدار ثابت در دیتابیس) و هم کاربرپسند (نمایش فارسی در رابط کاربری).
پروژه 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 و کار با فرمها بسیار مناسب است. در نسخههای توسعهیافته میتوان از جدول واسط برای ذخیرهسازی استاندارد، مدیریت پویا علاقهمندیها، فیلتر و جستجو بر اساس علاقهمندیها و رابط کاربری پیشرفتهتر استفاده کرد.»
بلاخره من موفق شدم ویدئو ضبط کنم و این دفعه اولمه کامل و بدونه صدا ضبط کنم
نمیدونم چرا برای من ویدئو ضبط کردن سخته؟