eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
120 دنبال‌کننده
168 عکس
38 ویدیو
376 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
در واقع attribute phone برای شماره تلفن بین‌المللی استفاده می‌شود و برای اطمینان از صحت و مناسبیت شماره‌ها، می‌توانید از ابزارهایی مانند RegularExpression استفاده کنید. این ابزارها به شما کمک می‌کنند تا شماره‌های تلفن بین‌المللی را با قالب مناسبی ارزیابی کنید. این الگو به شما اجازه می‌دهد که شماره‌های تلفن همراه ایرانی را با پیش‌شماره‌های ۰ و +۹۸ شناسایی کنید و مطمئن شوید که قالب آن‌ها درست است. توضیحات الگو: (\+98|0)? : این بخش نشان می‌دهد که شماره می‌تواند با +۹۸ یا ۰ شروع شود و این قسمت اختیاری است. 9 : نشان‌دهنده این است که شماره تلفن با ۹ شروع می‌شود (تمام شماره‌های موبایل در ایران با ۹ شروع می‌شوند). \d{9} : به این معناست که بعد از ۹، باید ۹ رقم دیگر باشد. استفاده در مدل: می‌توانید از این الگو در مدل خود استفاده کنید: public class ContactModel { [Required(ErrorMessage = "لطفا شماره تلفن خود را وارد کنید")] [RegularExpression(@"(\+98|0)?9\d{9}", ErrorMessage = "لطفا یک شماره تلفن معتبر وارد کنید")] public string PhoneNumber { get; set; } } با این کار، شماره تلفن‌های ورودی با الگوی مورد نظر تطبیق داده می‌شوند و در صورت نادرست بودن قالب، پیام خطای مشخص‌شده نمایش داده می‌شود.
Attribute Display در ASP.NET Core MVC و Entity Framework به شما اجازه می‌دهد تا نام‌های قابل فهم‌تری برای فیلدهای مدل‌ها در ویوها نمایش دهید. با استفاده از Display, می‌توانید نام‌هایی که به کاربران نشان داده می‌شود را تغییر دهید بدون اینکه نام فیلدهای مدل را تغییر دهید. مثال: فرض کنید یک مدل به نام User دارید و می‌خواهید نام فیلدها را در ویوها تغییر دهید: public class User { [Required] [Display(Name = "نام کاربری")] public string UserName { get; set; } [Required] [Display(Name = "ایمیل")] public string Email { get; set; } [Required] [Display(Name = "رمز عبور")] public string Password { get; set; } } استفاده در ویو: وقتی که از این مدل در ویو استفاده می‌کنید، نام‌های تعریف شده در Display به کاربران نمایش داده می‌شود: @model YourNamespace.Models.User <form asp-action="Register"> <div> <label asp-for="UserName"></label> <input asp-for="UserName" /> <span asp-validation-for="UserName"></span> </div> <div> <label asp-for="Email"></label> <input asp-for="Email" /> <span asp-validation-for="Email"></span> </div> <div> <label asp-for="Password"></label> <input asp-for="Password" type="password" /> <span asp-validation-for="Password"></span> </div> <button type="submit">ثبت نام</button> </form> نتیجه: با استفاده از Display, نام‌های فیلدها به کاربران به صورت فارسی یا هر نامی که مشخص کرده‌اید نمایش داده می‌شوند، مانند "نام کاربری"، "ایمیل" و "رمز عبور"، حتی اگر نام فیلدها در مدل به زبان انگلیسی باشد. این کار به بهبود خوانایی و تجربه کاربری کمک می‌کند و از استفاده از نام‌های داخلی فیلدها در رابط کاربری جلوگیری می‌کند.
یک نمونه خروجی برای مدل User که شامل اعتبارسنجی و نمایش نام فیلدها به فارسی است: مدل (User.cs): public class User { [Required] [Display(Name = "نام کاربری")] public string UserName { get; set; } [Required] [EmailAddress] [Display(Name = "ایمیل")] public string Email { get; set; } [Required] [Display(Name = "رمز عبور")] public string Password { get; set; } } ویو (Register.cshtml): @model YourNamespace.Models.User <h1>ثبت نام</h1> <form asp-action="Register"> <div> <label asp-for="UserName"></label> <input asp-for="UserName" /> <span asp-validation-for="UserName"></span> </div> <div> <label asp-for="Email"></label> <input asp-for="Email" /> <span asp-validation-for="Email"></span> </div> <div> <label asp-for="Password"></label> <input asp-for="Password" type="password" /> <span asp-validation-for="Password"></span> </div> <button type="submit">ثبت نام</button> </form> @section Scripts { @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} } نتیجه خروجی در مرورگر: وقتی این ویو را در مرورگر مشاهده کنید، فرم به این شکل خواهد بود: برچسب‌ها (label) و پیام‌های خطا (span) به فارسی نمایش داده می‌شوند. اگر کاربر فیلدهای اجباری را پر نکند یا ایمیل نامعتبری وارد کند، پیام‌های خطای مناسبی نمایش داده می‌شوند. با استفاده از مدل User و ویو Register که در بالا توضیح داده شد، وقتی کاربر فرم را پر کند و ارسال کند، نتیجه‌ای مانند زیر خواهید داشت: نام کاربری: اگر این فیلد پر نشده باشد، پیام "لطفا نام کاربری خود را وارد کنید" نمایش داده می‌شود. ایمیل: اگر ایمیل معتبر نباشد، پیام "لطفا یک آدرس ایمیل معتبر وارد کنید" نمایش داده می‌شود. رمز عبور: اگر رمز عبور وارد نشده باشد، پیام "لطفا رمز عبور خود را وارد کنید" نمایش داده می‌شود. این مثال به شما کمک می‌کند تا فرم‌های خود را با استفاده از Data Annotations اعتبارسنجی کنید و پیام‌های خطا را به زبان فارسی نمایش دهید.
اگر کاربر فایل JavaScript را حذف کند و اعتبارسنجی سمت کلاینت (Client-Side Validation) غیر فعال شود، اعتبارسنجی سمت سرور (Server-Side Validation) همچنان برای اطمینان از صحت داده‌ها ضروری است. اعتبارسنجی سمت سرور برای بررسی داده‌ها در سمت سرور پس از ارسال فرم انجام می‌شود و از وارد شدن داده‌های نادرست یا مخرب به سیستم جلوگیری می‌کند. چگونه اعتبارسنجی سمت سرور را پیاده‌سازی کنیم: مدل با اعتبارسنجی: مدل را با استفاده از Data Annotations برای تعریف قوانین اعتبارسنجی آماده کنید. این اعتبارسنجی‌ها در سمت سرور اعمال می‌شوند. public class User { [Required(ErrorMessage = "لطفا نام کاربری خود را وارد کنید")] [StringLength(100, ErrorMessage = "نام کاربری نباید بیش از 100 کاراکتر باشد")] public string UserName { get; set; } [Required(ErrorMessage = "لطفا ایمیل خود را وارد کنید")] [EmailAddress(ErrorMessage = "لطفا یک ایمیل معتبر وارد کنید")] public string Email { get; set; } [Required(ErrorMessage = "لطفا رمز عبور خود را وارد کنید")] [StringLength(100, ErrorMessage = "رمز عبور نباید بیش از 100 کاراکتر باشد")] public string Password { get; set; } } کنترلر برای پردازش داده‌ها: کنترلر را طوری تنظیم کنید که داده‌های ارسالی را اعتبارسنجی کند و در صورت عدم اعتبار، پیام‌های خطا را به کاربر نمایش دهد. public class UserController : Controller { [HttpPost] public IActionResult Register(User model) { if (ModelState.IsValid) { // منطق برای پردازش داده‌ها TempData["Message"] = "ثبت نام با موفقیت انجام شد"; return RedirectToAction("Index"); } // اگر داده‌ها معتبر نبودند، ویو با پیام‌های خطا بازگردانده می‌شود return View(model); } } ویو برای نمایش خطاها: ویو را طوری تنظیم کنید که پیام‌های خطای اعتبارسنجی سمت سرور را نمایش دهد. @model YourNamespace.Models.User <h1>ثبت نام</h1> <form asp-action="Register" method="post"> <div> <label asp-for="UserName"></label> <input asp-for="UserName" /> <span asp-validation-for="UserName"></span> </div> <div> <label asp-for="Email"></label> <input asp-for="Email" /> <span asp-validation-for="Email"></span> </div> <div> <label asp-for="Password"></label> <input asp-for="Password" type="password" /> <span asp-validation-for="Password"></span> </div> <button type="submit">ثبت نام</button> </form> @section Scripts { @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} } با این روش، حتی اگر JavaScript غیر فعال باشد یا فایل‌های اعتبارسنجی جاوااسکریپت حذف شوند، اعتبارسنجی سمت سرور از ورود داده‌های نادرست جلوگیری می‌کند و پیام‌های خطا به کاربر نمایش داده می‌شود.
Fluent Validation یک کتابخانه محبوب در دات‌نت است که امکان ایجاد قوانین اعتبارسنجی قدرتمند و منعطف را با استفاده از کدهای fluent فراهم می‌کند. به جای استفاده از Data Annotations، می‌توانید اعتبارسنجی‌های خود را با استفاده از کلاس‌های جداگانه تعریف کنید که قوانین اعتبارسنجی را به صورت روان و خوانا ایجاد می‌کنند. نصب Fluent Validation ابتدا باید کتابخانه FluentValidation را نصب کنید. می‌توانید از طریق NuGet Package Manager این کار را انجام دهید: dotnet add package FluentValidation ایجاد یک Validator یک کلاس Validator برای مدل خود ایجاد کنید. در این مثال، یک مدل به نام User و یک کلاس Validator برای آن ایجاد می‌کنیم: مدل (User.cs): public class User { public string UserName { get; set; } public string Email { get; set; } public string Password { get; set; } } Validator (UserValidator.cs): using FluentValidation; public class UserValidator : AbstractValidator<User> { public UserValidator() { RuleFor(user => user.UserName) .NotEmpty().WithMessage("لطفا نام کاربری خود را وارد کنید") .Length(1, 100).WithMessage("نام کاربری نباید بیش از 100 کاراکتر باشد"); RuleFor(user => user.Email) .NotEmpty().WithMessage("لطفا ایمیل خود را وارد کنید") .EmailAddress().WithMessage("لطفا یک ایمیل معتبر وارد کنید"); RuleFor(user => user.Password) .NotEmpty().WithMessage("لطفا رمز عبور خود را وارد کنید") .Length(6, 100).WithMessage("رمز عبور باید حداقل 6 کاراکتر باشد و نباید بیش از 100 کاراکتر باشد"); } } پیکربندی FluentValidation در ASP.NET Core باید FluentValidation را به سرویس‌های خود در Program.cs یا Startup.cs اضافه کنید: پیکربندی در Program.cs: var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); // افزودن FluentValidation builder.Services.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<UserValidator>()); var app = builder.Build(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); app.Run(); استفاده از Validator در کنترلر کنترلر خود را طوری تنظیم کنید که داده‌های ارسالی را با استفاده از Validator بررسی کند: کنترلر (UserController.cs): public class UserController : Controller { private readonly IValidator<User> _validator; public UserController(IValidator<User> validator) { _validator = validator; } [HttpPost] public IActionResult Register(User model) { var result = _validator.Validate(model); if (result.IsValid) { // منطق برای پردازش داده‌ها TempData["Message"] = "ثبت نام با موفقیت انجام شد"; return RedirectToAction("Index"); } foreach (var error in result.Errors) { ModelState.AddModelError(error.PropertyName, error.ErrorMessage); } return View(model); } } ویو برای نمایش خطاها ویو را طوری تنظیم کنید که پیام‌های خطای اعتبارسنجی Fluent Validation را نمایش دهد: ویو (Register.cshtml): @model YourNamespace.Models.User <h1>ثبت نام</h1> <form asp-action="Register" method="post"> <div> <label asp-for="UserName"></label> <input asp-for="UserName" /> <span asp-validation-for="UserName"></span> </div> <div> <label asp-for="Email"></label> <input asp-for="Email" /> <span asp-validation-for="Email"></span> </div> <div> <label asp-for="Password"></label> <input asp-for="Password" type="password" /> <span asp-validation-for="Password"></span> </div> <button type="submit">ثبت نام</button> </form> نتیجه با این روش، می‌توانید از FluentValidation برای اعتبارسنجی داده‌های ورودی استفاده کنید و پیام‌های خطای مناسبی به کاربر نمایش دهید.
Scaffolding چیست
در ASP.NET Core MVC، Scaffolding فرآیندی است که به شما کمک می‌کند کدهای ابتدایی و پایه‌ای برای عملیات CRUD (ایجاد، خواندن، به‌روزرسانی و حذف) را به صورت خودکار تولید کنید. با استفاده از Scaffolding، می‌توانید به سرعت کنترلرها و ویوهای مورد نیاز برای کار با مدل‌های داده‌ای خود را ایجاد کنید، بدون اینکه نیاز به نوشتن کدهای تکراری داشته باشید. مزایای استفاده از Scaffolding: صرفه‌جویی در زمان: به جای نوشتن دستی کدهای CRUD، می‌توانید به سرعت کدهای اولیه را تولید کنید. کاهش خطاها: کدهای تولید شده توسط Scaffolding معمولاً استاندارد و بدون خطا هستند. آسانی در توسعه: توسعه‌دهندگان تازه‌کار می‌توانند به سرعت با ساختار پروژه آشنا شوند و کدهای اولیه را تولید کنند. مراحل استفاده از Scaffolding: فرض کنید یک مدل به نام Product دارید و می‌خواهید کنترلر و ویوهای مربوط به آن را با استفاده از Scaffolding ایجاد کنید. 1. نصب ابزارهای مورد نیاز: مطمئن شوید که ابزارهای مورد نیاز برای Scaffolding نصب شده‌اند. می‌توانید از NuGet Package Manager برای نصب ابزارهای مربوطه استفاده کنید: dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Microsoft.EntityFrameworkCore.Design 2. ایجاد مدل (Product.cs): public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } 3. ایجاد DbContext (ApplicationDbContext.cs): public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public DbSet<Product> Products { get; set; } } 4. اجرای Scaffolding: از خط فرمان یا ترمینال برای اجرای دستور Scaffolding استفاده کنید. این دستور یک کنترلر و ویوهای مربوط به مدل Product ایجاد می‌کند: dotnet aspnet-codegenerator controller -name ProductsController -m Product -dc ApplicationDbContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries 5. تنظیم مسیرها: در فایل Program.cs یا Startup.cs، مسیرها را تنظیم کنید: var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); var app = builder.Build(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); app.Run(); نتیجه: با اجرای Scaffolding، یک کنترلر به نام ProductsController و ویوهای مرتبط با عملیات CRUD برای مدل Product ایجاد می‌شود. این کدهای تولید شده می‌توانند به سرعت شما را در شروع کار با مدل‌ها و پایگاه داده‌ها یاری کنند.
شاید برای شما هم پیش بیاد که یک پروژه بگیرید و بعضی از قسمتها مخصوصا در پنل admin یه بخش هایی وجود دارد که فقط عملیات CRUD (افزودن، ویرایش ، حذف و جزئیات) را می خواهیم برایش انجام دهیم و بیزینس خواصی ندارد فقط یه لیستی نمایش بدهیم ویرایش کند به لیست یک مقدار جدید اضافه کند و یا آنها را حذف کند می توانیم از Scaffolding استفاده کنیم که یک سیستم که ویژوال استودیو در اختیار ما قرار داده که با استفاده از Scaffolding می توانیم کدها را به صورت خودکار جنریت Generate کنیم و نیازی نباشد کدهای اون قسمت را خودمان بنویسیم
وقتی می خواهیم یک کنترلر برای مدل ایجاد کنیم سه تا حالت مختلف می توانم ایجاد کنم گزینه اول empty یک کنترلر خالی و یک اکشن index ایجاد می کند و گزینه دوم که یک کنترلر برای من ایجاد میکند که چهار عمل اصلی را داخلش پیاده سازی کرده 1- لیست 2- افزودن 3- ویرایش 4- حذف و گزینه سوم هم با همه این ها با استفاده از entity framwork پیاده سازی می کند ما از گزینه دوم استفاده می کنیم در قسمت بعدی نام کنترلر را انتخاب می کنیم و گزینه Add را می زنیم می بینید که تمامی اکشن مورد نیاز عملیات CRUD را ایجاد کرده
تا اینجا ScaffoldingUserController مورد نیاز نوشته شد از ایجا می خواهیم ویوها را هم بنویسیم از آنجا که خروجی را ببینیم چیز تمیزی نشان دهم من یک Repository می نویسم که یک داده های فیک برای ما برگردونه using AspNetCoreMvc.Models.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace AspNetCoreMvc.Models.Repositories { public class UserRepository { private readonly List<Users> _users = new List<Users>(); public UserRepository() { _users.Add(new Users { Age = 25, Email = "info@bugeto.net", Id = 1, Mobile = "09121000000", Name = "میثم" }); _users.Add(new Users { Age = 30, Email = "info@bugeto.net", Id = 2, Mobile = "09122000000", Name = "سامیار" }); } public List<Users> Get() { return _users; } public Users Find() { return _users.FirstOrDefault(); } } } در Repository یک لیست از user ایجاد کردم که در متد سازنده این کلاس دو تا مقدار دوتا user اضافه کردم چون هنوز دیتابیس نداریم دیتابیس را شبیه سازی کردم و داده ها را برگشت بدهم در پایین دو تا متد دارم یکیش get و دیگری Find متد get لیست تمام user را برگشت می دهد و متد Find برای جستجو استفاده می شود
من در کنترلر ScaffoldingUserController در ایجا یک نمونه از UserRepository ایجاد کنم و در متد سازنده مقدار دهی کنیم private readonly UserRepository _userRepository; public ScaffoldingUserController() { _userRepository = new UserRepository(); }
برای اینکه لیست user ها را ببینم به صورت Scaffolding این را ایجاد کنم میتوانم روی اکشن کلیک راست کنم و ایجا Add view را بزنم Razor View را انتخاب می کنیم در قسمت Template چه نوع view را ایجاد می کنید به صورت پیش فرض empty خالی هست که یک view خالی برای ما ایجاد می کند و ما می خواهیم یک view از نوع List ایجاد کنیم وقتی لیست را انتخاب می کنیم Model class برای ما ایجاد می شود و از ایجا مدل Model ما را می خواهد در ایجا مدل را از نوع کلاس User انتخاب می کنیم در گزینه Create as a Partial View که یک Partial View ایجاد می شود و گزینه بعدیReference script Libraries را بزنید script های مورد نیاز لیست یا هر نوع view را ایجاد کنیم اون script به view ها اضافه می شوند و گزینه آخر Layout های مورد نظر انتخاب کنیم و اگر Add را بزنیم view ایجاد می شود