از این به بعد پروژه ها با دات نت ۸ و ۱۰ نوشته میشود پروژه های کوچک و مقدماتی با دو نسخه نوشته می شود و در پروژه متوسط و پیشرفته با دات نت ۱۰ نوشته می شود
PriceProject.zip
حجم:
23.6M
من فکرم را کردم و دیدم چون هنوز دات نت 8 پشتیبانی می شود من پروژه ساده قیمت و مجموع و میانگین را با ویژوال اتودیو 2026 و دات نت 8 نوشتم
RandomItems.zip
حجم:
23.6M
پروژه تولید اعداد تصادف و ذخیره در دیتابیس دات نت 8
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه تولید اعداد تصادف و ذخیره در دیتابیس دات نت 8
تا اینجا کدی که نوشتی فقط کاراکترهای منفرد رو از رشتهی
charsانتخاب میکنه. یعنی خروجی همیشه ترکیبی از حروف یا اعداد جداگانه است. اگر بخوای به جای کاراکتر، کلمات کامل به صورت تصادفی انتخاب بشن، باید منبع دادهات (
chars) رو تغییر بدی و به جای یک رشته، یک لیست یا آرایه از کلمات تعریف کنی. --- ## 🔹 نمونه کد برای انتخاب کلمات تصادفی
// مجموعهای از کلمات
string[] words = { "سلام", "علیرضا", "محمد", "طاهـا", "پروژه", "کد" };
// تعداد کلمات تصادفی که میخوای بسازی
int length = 5;
// انتخاب تصادفی کلمات
string result = string.Join(" ",
Enumerable.Range(0, length)
.Select(_ => words[_rnd.Next(words.Length)])
);
---
## 🔹 توضیح خط به خط
- string[] words →
آرایهای از کلمات تعریف میکنیم.
- Enumerable.Range(0, length) →
تعداد دفعات انتخاب (مثلاً ۵ بار).
- Select(_ => words[_rnd.Next(words.Length)]) →
هر بار یک کلمهی تصادفی از آرایه انتخاب میکنه.
- string.Join(" ", ...) →
همهی کلمات انتخابشده رو با فاصله به هم وصل میکنه و یک رشتهی کامل میسازه.
---
## 🎯 خروجی نمونه
اگر آرایهی بالا باشه، خروجی میتونه چیزی مثل این باشه:
"محمد پروژه سلام علیرضا کد"یا
"سلام طاهـا علیرضا پروژه محمد"--- ## 🔹 فرق با حالت کاراکتر - در حالت قبلی: خروجی مثل
"سملاب"(ترکیب کاراکترها). - در حالت جدید: خروجی مثل
"سلام علیرضا پروژه"(ترکیب کلمات کامل).
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه تولید اعداد تصادف و ذخیره در دیتابیس دات نت 8
کد کامل پایه
csharp
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random _rnd = new Random();
int length = 6;
string result = new string(
Enumerable.Range(0, length)
.Select( => chars[rnd.Next(chars.Length)])
.ToArray()
);
---
بخشهای مقدماتی
مجموعه کاراکترها
csharp string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";- این رشته منبع انتخاب کاراکترهاست: حروف بزرگ انگلیسی + اعداد 0 تا 9. - هر بار یک کاراکتر از همین مجموعه انتخاب میکنیم، نه عدد و نه ایندکس؛ خودِ کاراکتر. مثال: - اگر chars = "ABC123" باشد، خروجی فقط از کاراکترهای A, B, C, 1, 2, 3 ساخته میشود. تولیدکننده تصادفی
csharp Random _rnd = new Random();- برای تولید ایندکس تصادفی و انتخاب «کاراکتر» از chars استفاده میشود. - هر فراخوانی Next(max) یک عدد تصادفی بین 0 و max-1 میدهد تا با آن یک کاراکتر از chars برداریم. مثال: - _rnd.Next(chars.Length) اگر 2 بدهد و chars = "ABC123" باشد، کاراکتر سوم یعنی C انتخاب میشود. طول رشته خروجی
csharp int length = 6;- مشخص میکند چند «کاراکتر» در خروجی داشته باشیم. - اگر length = 6 باشد، رشته خروجی دقیقاً 6 کاراکتر خواهد داشت. مثال: - length = 4 خروجیهایی مثل "A9B2" تولید میکند. --- ساخت رشته مرحلهبهمرحله شمارنده تکرار با Range
csharp Enumerable.Range(0, length)- یک دنباله از «ایندکسهای تکرار» میسازد: از 0 تا length-1. - هدفش فقط تعیین تعداد دفعات انتخاب کاراکتر است؛ خودش کاراکتر تولید نمیکند. مثال: - Enumerable.Range(0, 3) خروجی: [0, 1, 2]. انتخاب کاراکتر تصادفی با Select
csharp .Select( => chars[rnd.Next(chars.Length)])- برای «هر تکرار»، یک کاراکتر تصادفی از chars انتخاب میکنیم. - عبارت chars[_rnd.Next(chars.Length)] یعنی: - یک ایندکس تصادفی معتبر تولید کن، - سپس «کاراکتر» متناظر از chars را بردار. مثال: - اگر chars = "ABC123" و طولش 6 باشد: - بار اول Next(6) ممکن است 2 بدهد → کاراکتر C. - بار دوم ممکن است 5 بدهد → کاراکتر 3. - خروجی Select چیزی مثل: ['C', 'A', '3', 'B', '1', 'C']. تبدیل به آرایه و رشته
csharp .ToArray()- دنباله کاراکترها را به char[] تبدیل میکند؛ برای ساخت رشته لازم است.
csharp new string(charArray)- آرایه کاراکترها را به یک رشته نهایی تبدیل میکند؛ مثلاً "CA3B1C". --- نکته مهم درباره نام پارامتر در Select چرا از _ استفاده میکنیم؟ - وقتی مقدار داخل Select استفاده نمیشود (فقط نقش «تکرار» دارد)، نامگذاری با _ قراردادی است و خوانایی را بالا میبرد: یعنی «این ورودی مهم نیست». - اگر میخواهی واضحتر باشد، میتوانی از i استفاده کنی. دو نسخه معادل:
csharp // نسخه با _ Enumerable.Range(0, length) .Select( => chars[rnd.Next(chars.Length)]) // نسخه با i (خوانایی برای مبتدیها) Enumerable.Range(0, length) .Select(i => chars[_rnd.Next(chars.Length)])در هر دو، «i» یا «_» خودش استفاده نمیشود؛ فقط تعداد دفعات Select را تعیین میکند. --- مثالهای تکمیلی برای درک Range و Select مثال ۱: لیست اعداد پشتسرهم
csharp var numbers = Enumerable.Range(0, 5).ToList(); // خروجی: [0, 1, 2, 3, 4]- فقط نشان میدهد Range چطور «تعداد» میسازد. مثال ۲: ساخت برچسبهای نمایشی
csharp var labels = Enumerable.Range(0, 10) .Select(i => $"آیتم شماره {i}") .ToList(); // خروجی: ["آیتم شماره 0", ..., "آیتم شماره 9"]- ترکیب Range با Select برای تبدیل ایندکسها به «رشتههای معنیدار». --- جمعبندی اجرایی - منبع کاراکترها را با chars تعریف میکنی. - با Random ایندکس تصادفی میسازی تا «کاراکتر» برداری. - length فقط تعداد کاراکترهای خروجی را مشخص میکند. - Enumerable.Range(0, length) تعداد تکرار را فراهم میکند. - Select در هر تکرار یک کاراکتر تصادفی از chars برمیدارد. - خروجی کاراکترها با ToArray جمع میشود و با new string(...) تبدیل به رشته نهایی میگردد. اگر بخواهی منتشر کنی، میتوانیم همین متن را کمی کوتاه کنیم و در کنارش یک تابع تمیز ارائه بدهیم تا مخاطب بتواند مستقیم استفاده کند:
csharp
public static string GenerateRandomString(int length, string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", Random rnd = null)
{
rnd ??= new Random();
return new string(
Enumerable.Range(0, length)
.Select(_ => chars[rnd.Next(chars.Length)])
.ToArray()
);
}
پروژه ASP.Net Core MVC (وب و سی شارپ)
کد کامل پایه csharp string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random _rnd = new Random
زمان:
حجم:
4.3M
تولید اعداد تصادفی
string result = new string(
Enumerable.Range(0, length)
.Select( _=> chars[_rnd.Next(chars.Length)])
.ToArray()
ساخته شده از هوش مصنوعی
پروژه 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). - اما در فرمها و نمایش، کاربر همیشه متن فارسی میبینه (گزینه اول، گزینه دوم، گزینه سوم). این باعث میشه پروژه هم استاندارد باشه (ذخیره مقدار ثابت در دیتابیس) و هم کاربرپسند (نمایش فارسی در رابط کاربری).