eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
121 دنبال‌کننده
168 عکس
38 ویدیو
376 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
DataBaseContext.cs استفاده از نام‌فضاها (Namespaces) csharp using Microsoft.EntityFrameworkCore; using Test_Store.Application.Interfaces.Contexs; using Test_Store.Domain.Entities.Users; using Microsoft.EntityFrameworkCore;: این دستور به شما امکان می‌دهد تا از امکانات و کلاس‌های ارائه‌شده توسط Entity Framework Core استفاده کنید. using Test_Store.Application.Interfaces.Contexs;: این دستور برای دسترسی به اینترفیس‌های موجود در Test_Store.Application.Interfaces.Contexs استفاده می‌شود. using Test_Store.Domain.Entities.Users;: این دستور برای دسترسی به کلاس‌ها و موجودیت‌هایی که در نام‌فضای Test_Store.Domain.Entities.Users تعریف شده‌اند، استفاده می‌شود. تعریف نام‌فضا و کلاس csharp namespace Test_Store.Persistence.Context { public class DataBaseContext : DbContext, IDataBaseContext { public DataBaseContext(DbContextOptions options) : base(options) { } public DbSet<User> Users { get; set; } public DbSet<Role> Roles { get; set; } public DbSet<UserInRole> UsersInRoles { get; set; } } } namespace Test_Store.Persistence.Context: این بخش، نام‌فضا (namespace) را تعریف می‌کند که کدهای مربوط به این کلاس در آن قرار دارند. نام‌فضاها برای سازماندهی و دسته‌بندی کدها استفاده می‌شوند. public class DataBaseContext : DbContext, IDataBaseContext: این خط کلاس DataBaseContext را تعریف می‌کند که از DbContext ارث‌بری می‌کند و اینترفیس IDataBaseContext را پیاده‌سازی می‌کند. این کلاس برای مدیریت و تعامل با پایگاه داده استفاده می‌شود. سازنده کلاس DataBaseContext csharp public DataBaseContext(DbContextOptions options) : base(options) { } public DataBaseContext(DbContextOptions options) : base(options): این سازنده کلاس DataBaseContext است که پارامتر options از نوع DbContextOptions را دریافت می‌کند و آن را به سازنده پایه (base) یعنی سازنده کلاس DbContext منتقل می‌کند. این پارامتر تنظیمات و گزینه‌های مورد نیاز برای پیکربندی دیتابیس را شامل می‌شود. پراپرتی‌های DbSet csharp public DbSet<User> Users { get; set; } public DbSet<Role> Roles { get; set; } public DbSet<UserInRole> UsersInRoles { get; set; } public DbSet<User> Users { get; set; }: این پراپرتی مجموعه‌ای از موجودیت‌های User را نشان می‌دهد که توسط Entity Framework برای تعامل با جدول کاربران در پایگاه داده استفاده می‌شود. public DbSet<Role> Roles { get; set; }: این پراپرتی مجموعه‌ای از موجودیت‌های Role را نشان می‌دهد که توسط Entity Framework برای تعامل با جدول نقش‌ها در پایگاه داده استفاده می‌شود. public DbSet<UserInRole> UsersInRoles { get; set; }: این پراپرتی مجموعه‌ای از موجودیت‌های UserInRole را نشان می‌دهد که توسط Entity Framework برای تعامل با جدول ارتباطی کاربران و نقش‌ها در پایگاه داده استفاده می‌شود. نتیجه‌گیری این کد یک کلاس DataBaseContext را تعریف می‌کند که از DbContext ارث‌بری کرده و اینترفیس IDataBaseContext را پیاده‌سازی می‌کند. این کلاس برای تعامل با پایگاه داده و مدیریت موجودیت‌های User، Role و UserInRole استفاده می‌شود. با استفاده از این کد، شما می‌توانید عملیات CRUD (ایجاد، خواندن، به‌روزرسانی و حذف) را بر روی این موجودیت‌ها انجام دهید.
Program.cs افزودن سرویس‌ها به کانتینر csharp // Add services to the container. این خط نظر (comment) است و برای توضیح اینکه بخش بعدی کد سرویس‌ها را به کانتینر DI (Dependency Injection) اضافه می‌کند، استفاده می‌شود. افزودن Scoped Service csharp builder.Services.AddScoped<IDataBaseContext, DataBaseContext>(); builder.Services.AddScoped<IDataBaseContext, DataBaseContext>();: این خط به DI Container می‌گوید که هر بار که به IDataBaseContext نیاز داریم، یک نمونه جدید از DataBaseContext ایجاد کند. "Scoped" به این معنی است که یک نمونه جدید برای هر درخواست HTTP ساخته می‌شود. تنظیمات اتصال به پایگاه داده csharp string connectionString = @"Server=.\SQLEXPRESS; Database=Test_StoreDb; Integrated Security=True; TrustServerCertificate=True;"; string connectionString = @"Server=.\SQLEXPRESS; Database=Test_StoreDb; Integrated Security=True; TrustServerCertificate=True;";: این خط یک رشته اتصال (connection string) را تعریف می‌کند که برای اتصال به پایگاه داده SQL Server استفاده می‌شود. این رشته اتصال شامل اطلاعات سرور، نام دیتابیس و تنظیمات امنیتی است. پیکربندی DbContext csharp builder.Services.AddDbContext<DataBaseContext>(options => options.UseSqlServer(connectionString)); builder.Services.AddDbContext<DataBaseContext>(options => options.UseSqlServer(connectionString));: این خط به DI Container می‌گوید که از DbContext با استفاده از تنظیمات SQL Server و رشته اتصال داده‌شده (connectionString) استفاده کند. UseSqlServer مشخص می‌کند که از SQL Server به عنوان دیتابیس استفاده شود. افزودن سرویس‌های MVC csharp builder.Services.AddControllersWithViews(); builder.Services.AddControllersWithViews();: این خط به DI Container می‌گوید که سرویس‌های MVC را با پشتیبانی از کنترلرها و نماها اضافه کند. این سرویس‌ها برای ایجاد و مدیریت درخواست‌ها و پاسخ‌ها در برنامه ASP.NET Core استفاده می‌شوند. نتیجه‌گیری این بخش از کد، سرویس‌های مورد نیاز برای تعامل با پایگاه داده و پشتیبانی از MVC را به کانتینر DI اضافه می‌کند. با این تنظیمات، برنامه شما قادر خواهد بود تا به پایگاه داده متصل شود و از کنترلرها و نماها برای مدیریت درخواست‌ها و پاسخ‌ها استفاده کند.
در packing manager console عبارت Add-Migration users و بعد Update-Database وارد کنید
Test_Store 5.zip
حجم: 42.9M
پروژه قسمت دوم Users در این بخش Common: فایل Pagination.cs پوشه Dto فایل ResultDto.cs پوشه Roles فایل UserRoles.cs و Application: پوشه های Services و Users و Commands و RegisterUser فایل IRegisterUserService.cs و پوشه های Services و Users و Queries و GetRoles فایل ها GetRolesService.cs IGetRolesService.cs RolesDto.cs و پوشه های Services و Users و Queries و GetUsers فایل ها GetUsersDto.cs GetUsersService.cs IGetUsersService.cs RequestGetUserDto.cs ReslutGetUserDto.cs اضافه شدند
ساختار درختی پوشه و فایل Test_Store │ ├── Doc │ ├── Src │ ├── Common │ │ └── library: Test_Store.Common │ │ ├── Dto │ │ │ └── ResultDto.cs │ │ ├── Roles │ │ │ └── UserRoles.cs │ │ └── Pagination.cs │ │ │ ├──── Core │ │ ├──── library: Test_Store.Application │ │ │ ├── Interfaces │ │ │ │ └── Contexs │ │ │ │ └── IDataBaseCotex.cs │ │ │ └── Services │ │ │ └── Users │ │ │ ├── Commands │ │ │ │ └── RegisterUser │ │ │ │ └── IRegisterUserService.cs │ │ │ └── Queries │ │ │ ├── GetRoles │ │ │ │ ├── GetRolesService.cs │ │ │ │ ├── IGetRolesService.cs │ │ │ │ └── RolesDto.cs │ │ │ └── GetUsers │ │ │ ├── GetUsersDto.cs │ │ │ ├── GetUsersService.cs │ │ │ ├── IGetUsersService.cs │ │ │ ├── RequestGetUserDto.cs │ │ │ └── ReslutGetUserDto.cs │ │ │ │ │ └── library: Test_Store.Domain │ │ └── Entities │ │ └── Users │ │ ├── Role.cs │ │ ├── User.cs │ │ └── UserInRole.cs │ │ │ ├── Infrastructure │ │ ├── library: Test_Store.Infrastructure │ │ └── library: Test_Store.Persistence │ │ ├── Context │ │ │ └── DataBaseContext.cs │ │ └── Migrations │ │ ├── ......_Users.cs │ │ └── DataBaseContextModelSnapshot.cs │ │ │ └── Presentation │ └── ASP.NET Core: EndPoint.Site │ │ │ ├── Areas │ │ └── Admin │ │ ├── Controllers │ │ │ └── UsersController.cs │ │ ├── Views │ │ │ ├── Shared │ │ │ │ └── _AdminLayout.cshtml │ │ │ └── Users │ │ │ ├── Create.cshtml │ │ │ └── Index.cshtml │ │ └── Models │ ├── Controllers │ │ └── HomeController.cs │ ├── Views │ │ ├── Home │ │ │ ├── Index.cshtml │ │ │ └── Privacy.cshtml │ │ ├── Shared │ │ │ ├── _Layout.cshtml │ │ │ ├── _ValidationScriptsPartial.cshtml │ │ │ └── Error.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ ├── Models │ │ └── ErrorViewModel.cs │ ├── wwwroot │ │ ├── AdminTemplate │ │ ├── css │ │ ├── js │ │ ├── lib │ │ ├── SiteTemplate │ │ └── favicon.ico │ └── Program.cs │ └── Test
فعال کردن دکمه ثبت نام و ورود و آوردن صفحه ثبت نام
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers این دستور یک دستور Razor است که در فایل‌های Razor (مانند .cshtml) استفاده می‌شود تا Tag Helperهای خاص ASP.NET Core MVC را به نماهای شما اضافه کند. توضیحات اجزای دستور @addTagHelper: این دستور به Razor می‌گوید که Tag Helperهایی که در برنامه استفاده می‌کنید را ثبت کند. Tag Helperها به شما امکان می‌دهند که HTML کدهای سرور را با استفاده از سینتکس HTML راحت‌تر بنویسید و مدیریت کنید. *: این کاراکتر به عنوان یک ویلدکارت عمل می‌کند و به معنای همه Tag Helperها است. به عبارت دیگر، همه Tag Helperهایی که در اسمبلی مشخص‌شده (در اینجا Microsoft.AspNetCore.Mvc.TagHelpers) تعریف شده‌اند را شامل می‌شود. Microsoft.AspNetCore.Mvc.TagHelpers: این نام اسمبلی (assembly) یا کتابخانه‌ای است که Tag Helperها در آن تعریف شده‌اند. در اینجا، Tag Helperهای پیش‌فرض ASP.NET Core MVC هستند که برای کمک به مدیریت فرم‌ها، پیوندها، و سایر عناصر HTML استفاده می‌شوند. نتیجه‌گیری با اضافه کردن این دستور به نماهای Razor خود، می‌توانید از Tag Helperهای ASP.NET Core MVC بهره‌مند شوید. این Tag Helperها به شما امکان می‌دهند که با استفاده از سینتکس HTML راحت‌تر و قوی‌تری، کدهای سرور را بنویسید. برای مثال، Tag Helperهایی مانند asp-for، asp-controller و asp-action که برای تولید فرم‌ها و لینک‌ها استفاده می‌شوند.
توضیح کد html <div class="form-group"> <label>انتخاب کنید</label> <select class="form-control" id="Role" name="Role" asp-items="@ViewBag.Roles"> </select> </div> توضیحات اجزای کد <div class="form-group">: این تگ div برای گروه‌بندی المان‌های فرم استفاده می‌شود. کلاس form-group از Bootstrap برای اعمال استایل‌های پیش‌فرض استفاده می‌شود. <label>انتخاب کنید</label>: این تگ label برای نمایش یک برچسب (Label) به کاربر استفاده می‌شود. متن داخل آن "انتخاب کنید" است که به کاربر نشان می‌دهد باید گزینه‌ای را انتخاب کند. <select class="form-control" id="Role" name="Role" asp-items="@ViewBag.Roles">: این تگ select برای ایجاد یک لیست کشویی (Dropdown) استفاده می‌شود. class="form-control": این کلاس از Bootstrap برای اعمال استایل‌های پیش‌فرض به لیست کشویی استفاده می‌شود. id="Role": این شناسه (ID) یکتا برای این المان است که می‌تواند در جاوااسکریپت یا استایل‌ها استفاده شود. name="Role": این نام (Name) که برای ارسال داده‌های این المان به سرور استفاده می‌شود. asp-items="@ViewBag.Roles": این ویژگی از ASP.NET Core Tag Helpers استفاده می‌کند تا آیتم‌های لیست کشویی را با استفاده از ViewBag.Roles پر کند. ViewBag.Roles باید در کنترلر تنظیم شود و یک مجموعه از گزینه‌های موجود را برای لیست کشویی فراهم کند. مثال استفاده از ViewBag در کنترلر برای اینکه asp-items به درستی کار کند، باید در کنترلر خود ViewBag.Roles را تنظیم کنید. به عنوان مثال: csharp public IActionResult Create() { ViewBag.Roles = new SelectList(new List<string> { "Admin", "User", "Guest" }); return View(); } در این مثال، ViewBag.Roles یک SelectList از سه نقش مختلف (Admin, User, Guest) ایجاد می‌کند و آن را به نما ارسال می‌کند تا آیتم‌های لیست کشویی را پر کند. نتیجه‌گیری این کد یک لیست کشویی را در یک فرم HTML ایجاد می‌کند که با استفاده از داده‌های موجود در ViewBag.Roles پر می‌شود. استایل‌های Bootstrap به کار گرفته شده‌اند تا فرم و لیست کشویی ظاهری مرتب و استاندارد داشته باشند.
Test_Store.Common => Dto => ResultDto.cs توضیح کلی این کد دو کلاس ResultDto و ResultDto<T> را در یک نام‌فضا (namespace) به نام Test_Store.Common.Dto تعریف می‌کند. این کلاس‌ها برای انتقال داده‌ها به عنوان نتیجه عملیات مختلف استفاده می‌شوند. تعریف نام‌فضا csharp namespace Test_Store.Common.Dto این بخش، نام‌فضا (namespace) را تعریف می‌کند که این کلاس‌ها در آن قرار دارند. نام‌فضاها برای سازماندهی و دسته‌بندی کدها استفاده می‌شوند. کلاس ResultDto csharp public class ResultDto { public bool IsSuccess { get; set; } public string Massage { get; set; } } public bool IsSuccess { get; set; }: این پراپرتی نشان‌دهنده موفقیت یا عدم موفقیت یک عملیات است. اگر مقدار آن true باشد، عملیات موفق بوده است، و اگر false باشد، عملیات با شکست مواجه شده است. public string Massage { get; set; }: این پراپرتی پیامی (Message) را که مربوط به نتیجه عملیات است، ذخیره می‌کند. به عنوان مثال، ممکن است پیام موفقیت یا خطا باشد. کلاس جنریک ResultDto<T> csharp public class ResultDto<T> { public bool IsSuccess { get; set; } public string Massage { get; set; } public T Data { get; set; } } public bool IsSuccess { get; set; }: این پراپرتی نیز نشان‌دهنده موفقیت یا عدم موفقیت یک عملیات است. public string Massage { get; set; }: این پراپرتی پیامی را که مربوط به نتیجه عملیات است، ذخیره می‌کند. public T Data { get; set; }: این پراپرتی یک داده از نوع جنریک T را ذخیره می‌کند. این ویژگی امکان می‌دهد که کلاس ResultDto<T> برای ذخیره هر نوع داده‌ای استفاده شود. به عنوان مثال، ممکن است داده‌ای از نوع User، Product یا هر نوع دیگری باشد. نتیجه‌گیری این دو کلاس ResultDto و ResultDto<T> به شما امکان می‌دهند که نتایج عملیات مختلف را به صورت استاندارد و یکپارچه مدیریت کنید. ResultDto برای نتایج ساده و ResultDto<T> برای نتایج حاوی داده‌های جنریک استفاده می‌شوند.
Test_Store.Common => Roles => UserRoles.cs نام‌فضا (Namespace) csharp namespace Test_Store.Common.Roles این خط، نام‌فضا (namespace) Test_Store.Common.Roles را تعریف می‌کند. نام‌فضاها برای سازماندهی و دسته‌بندی کدها استفاده می‌شوند. در اینجا، این نام‌فضا مربوط به نقش‌های کاربری است. کلاس UserRoles csharp public class UserRoles { public const string Admin = "Admin"; public const string Operator = "Operator"; public const string Customer = "Customer"; } public class UserRoles: این خط کلاس UserRoles را تعریف می‌کند. این کلاس شامل تعریف‌های ثابت (constant) برای نقش‌های مختلف کاربران در سیستم است. public const string Admin = "Admin";: این خط یک ثابت (constant) عمومی به نام Admin تعریف می‌کند که مقدار آن برابر با رشته "Admin" است. این ثابت برای شناسایی نقش مدیر (Admin) در سیستم استفاده می‌شود. public const string Operator = "Operator";: این خط یک ثابت (constant) عمومی به نام Operator تعریف می‌کند که مقدار آن برابر با رشته "Operator" است. این ثابت برای شناسایی نقش اپراتور (Operator) در سیستم استفاده می‌شود. public const string Customer = "Customer";: این خط یک ثابت (constant) عمومی به نام Customer تعریف می‌کند که مقدار آن برابر با رشته "Customer" است. این ثابت برای شناسایی نقش مشتری (Customer) در سیستم استفاده می‌شود. نتیجه‌گیری کلاس UserRoles به شما امکان می‌دهد که نقش‌های مختلف کاربران را به صورت ثابت و تعریف شده داشته باشید. این کار می‌تواند به شما کمک کند تا از مقادیر ثابت در کدهای خود استفاده کنید و از اشتباهات تایپی یا مقادیر اشتباه جلوگیری کنید. این نقش‌ها می‌توانند در بخش‌های مختلف سیستم مانند احراز هویت و مجوزها استفاده شوند.
Test_Store.Common => Pagination.cs نام‌فضا (Namespace) csharp namespace Test_Store.Common این خط، نام‌فضا (namespace) Test_Store.Common را تعریف می‌کند. نام‌فضاها برای سازماندهی و دسته‌بندی کدها استفاده می‌شوند. کلاس Pagination csharp public static class Pagination { public static IEnumerable<TSource> ToPaged<TSource>(this IEnumerable<TSource> source , int page , int pagSize ,out int rowsCont) { rowsCont = source.Count(); return source.Skip((page -1) * pagSize).Take(rowsCont); } } public static class Pagination: این خط یک کلاس استاتیک به نام Pagination تعریف می‌کند. کلاس‌های استاتیک نمی‌توانند نمونه‌سازی شوند و تمام اعضای آن‌ها نیز باید استاتیک باشند. متد ToPaged<TSource> این متد برای صفحه‌بندی لیستی از آیتم‌ها استفاده می‌شود. صفحه‌بندی به معنای تقسیم لیست بلند از آیتم‌ها به صفحات کوچکتر است که به کاربران نمایش داده می‌شود. تعریف متد csharp public static IEnumerable<TSource> ToPaged<TSource>(this IEnumerable<TSource> source, int page, int pagSize, out int rowsCont) public static IEnumerable<TSource> ToPaged<TSource>(this IEnumerable<TSource> source, int page, int pagSize, out int rowsCont): این متد استاتیک و جنریک است و یک IEnumerable<TSource> را برمی‌گرداند. این متد از یک IEnumerable<TSource> ورودی (source) برای صفحه‌بندی استفاده می‌کند. this IEnumerable<TSource> source: این قسمت به متد اجازه می‌دهد که به عنوان یک متد افزونه (extension method) برای انواع IEnumerable<TSource> استفاده شود. int page: شماره صفحه‌ای که قرار است بازیابی شود. int pagSize: تعداد آیتم‌هایی که قرار است در هر صفحه نمایش داده شود. out int rowsCont: تعداد کل آیتم‌ها در لیست اصلی را برمی‌گرداند. از out برای برگرداندن این مقدار استفاده می‌شود. محتوای متد csharp rowsCont = source.Count(); return source.Skip((page - 1) * pagSize).Take(pagSize); rowsCont = source.Count();: این خط تعداد کل آیتم‌های موجود در لیست اصلی را محاسبه کرده و در متغیر rowsCont ذخیره می‌کند. return source.Skip((page - 1) * pagSize).Take(pagSize);: این خط آیتم‌های مورد نظر برای صفحه‌بندی را انتخاب می‌کند. ابتدا تعداد آیتم‌های صفحه‌های قبلی را رد می‌کند (Skip) و سپس تعداد آیتم‌های مورد نیاز برای صفحه جاری را برمی‌دارد (Take). نتیجه‌گیری این کد یک متد افزونه (extension method) به نام ToPaged را تعریف می‌کند که به هر IEnumerable<TSource> اجازه می‌دهد تا به‌طور کارآمد به صفحات کوچکتر تقسیم شود. این متد صفحه‌ای از آیتم‌ها را بر اساس شماره صفحه و اندازه صفحه بازمی‌گرداند و تعداد کل آیتم‌ها را نیز برمی‌گرداند.