برای مثالی که شامل پارامتر id باشد و خروجی این پارامتر را نمایش دهد، ابتدا یک کنترلر و یک ویو ایجاد میکنیم.
کنترلر (ProductsController.cs):
public class ProductsController : Controller
{
public IActionResult Details(int? id)
{
if (id == null)
{
return NotFound("ID محصول ارائه نشده است.");
}
// منطق برای دریافت محصول با استفاده از ID
var product = new Product
{
Id = id.Value,
Name = "Product Name",
Price = 100
};
return View(product);
}
}
ویو (Details.cshtml):
@model YourNamespace.Models.Product
<h1>جزییات محصول</h1>
@if (Model != null)
{
<div>
<p>شناسه: @Model.Id</p>
<p>نام: @Model.Name</p>
<p>قیمت: @Model.Price</p>
</div>
}
else
{
<p>محصول یافت نشد.</p>
}
تنظیمات در Program.cs:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
app.Run();
توضیحات:
در کنترلر، اکشن Details شناسه id را به عنوان پارامتر دریافت میکند. اگر id ارائه نشده باشد، یک پیام خطا نمایش داده میشود.
در ویو، مدل Product نمایش داده میشود که شامل شناسه، نام و قیمت محصول است.
در Program.cs، مسیر پیشفرض شامل پارامتر id? است که اختیاری بودن id را نشان میدهد.
با این مثال، اگر به URL /Products/Details/1 مراجعه کنید، جزئیات محصول با id = 1 نمایش داده میشود. اگر id ارائه نشده باشد، پیام خطای مناسب نمایش داده خواهد شد.
در ASP.NET Core MVC، اعتبارسنجی (Validation) فرآیندی است که در آن دادههای ورودی بررسی میشوند تا اطمینان حاصل شود که مطابق با قوانین و محدودیتهای خاصی هستند. اعتبارسنجی میتواند به صورت سمت سرور و سمت کلاینت انجام شود. اعتبارسنجی سمت کلاینت میتواند با استفاده از JavaScript و کتابخانههای مرتبط انجام شود، در حالی که اعتبارسنجی سمت سرور با استفاده از Data Annotations و منطق کد در کنترلرها انجام میشود.
استفاده از Data Annotations برای اعتبارسنجی:
Data Annotations
میتوانند در مدلها استفاده شوند تا قوانین اعتبارسنجی را تعریف کنند. این قوانین شامل الزامات پایهای مانند فیلدهای اجباری، طول رشته، محدوده عدد و الگوهای خاص میشوند.
مثال:
مدلی با اعتبارسنجی:
public class ContactModel
{
[Required(ErrorMessage = "لطفا نام خود را وارد کنید")]
[StringLength(100, ErrorMessage = "نام نباید بیش از 100 کاراکتر باشد")]
public string Name { get; set; }
[Required(ErrorMessage = "لطفا ایمیل خود را وارد کنید")]
[EmailAddress(ErrorMessage = "لطفا یک ایمیل معتبر وارد کنید")]
public string Email { get; set; }
[Required(ErrorMessage = "لطفا پیام خود را وارد کنید")]
public string Message { get; set; }
}
اعمال اعتبارسنجی در ویو:
در ویو میتوان از Tag Helpers و HTML Helpers برای نمایش پیامهای خطای اعتبارسنجی استفاده کرد.
ویو (Index.cshtml):
@model YourNamespace.Models.ContactModel
<h1>فرم تماس با ما</h1>
<form asp-action="Index" method="post">
<div>
<label asp-for="Name"></label>
<input asp-for="Name" />
<span asp-validation-for="Name"></span>
</div>
<div>
<label asp-for="Email"></label>
<input asp-for="Email" />
<span asp-validation-for="Email"></span>
</div>
<div>
<label asp-for="Message"></label>
<textarea asp-for="Message"></textarea>
<span asp-validation-for="Message"></span>
</div>
<button type="submit">ارسال</button>
</form>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
اکشن کنترلر:
در کنترلر، میتوان مدل را دریافت و بررسی کرد که آیا دادهها معتبر هستند یا خیر:
public class ContactController : Controller
{
[HttpPost]
public IActionResult Index(ContactModel model)
{
if (ModelState.IsValid)
{
// منطق پردازش پیام
TempData["Message"] = "پیام شما با موفقیت ارسال شد!";
return RedirectToAction("Index");
}
return View(model);
}
}
افزودن اسکریپتهای اعتبارسنجی:
در نهایت، اطمینان حاصل کنید که فایل _ValidationScriptsPartial.cshtml شامل اسکریپتهای اعتبارسنجی است:
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.min.js"></script>
این فرآیندها کمک میکنند تا از ورود دادههای نادرست جلوگیری شود و تجربه کاربری بهتری فراهم شود.
asp-validation-for
یک Tag Helper در ASP.NET Core است که برای نمایش پیامهای خطای اعتبارسنجی در کنار کنترلهای ورودی فرم استفاده میشود. این Tag Helper به شما امکان میدهد که به راحتی پیامهای خطای مرتبط با یک فیلد خاص را نشان دهید.
مثال استفاده از asp-validation-for:
<form asp-action="SubmitForm" method="post">
<div>
<label asp-for="Name"></label>
<input asp-for="Name" />
<span asp-validation-for="Name"></span>
</div>
<div>
<label asp-for="Email"></label>
<input asp-for="Email" />
<span asp-validation-for="Email"></span>
</div>
<button type="submit">ارسال</button>
</form>
تنظیم رنگ پیامهای خطا به رنگ قرمز:
برای تنظیم رنگ پیامهای خطای اعتبارسنجی به رنگ قرمز، میتوانید CSS سفارشی اضافه کنید. به عنوان مثال:
ایجاد یا اصلاح فایل CSS (مثل site.css):
.field-validation-error {
color: red;
}
اطمینان از بارگذاری CSS در ویو یا Layout:
<!DOCTYPE html>
<html>
<head>
<title>@ViewData["Title"] - My Web Application</title>
<link rel="stylesheet" type="text/css" href="~/css/site.css" />
</head>
<body>
<header>
<nav>
<!-- نوار ناوبری -->
</nav>
</header>
<main>
@RenderBody()
</main>
<footer>
<!-- فوتر -->
</footer>
@RenderSection("Scripts", required: false)
</body>
</html>
نتیجه:
با این کار، پیامهای خطای اعتبارسنجی که توسط asp-validation-for تولید میشوند، به رنگ قرمز نمایش داده خواهند شد و تجربه کاربری بهتری را فراهم میکنند.
پارشیال (Partial View) در ASP.NET Core MVC یک ویو جزئی است که میتواند برای ساختاردهی و مدیریت بهتر کدها و اجزای قابل تکرار ویوها استفاده شود. با استفاده از پارشیالها، میتوانید قطعات مشترکی از کد را در ویوهای مختلف استفاده کنید، بدون اینکه نیاز به تکرار آنها باشد. این روش به نوشتن کدهای تمیزتر و قابل نگهداریتر کمک میکند.
مثال کاربرد پارشیال ویو:
فرض کنید یک منوی ناوبری دارید که در تمام صفحات وبسایت تکرار میشود. میتوانید آن را به صورت یک پارشیال ویو تعریف کنید.
1. ایجاد پارشیال ویو (_Navigation.cshtml):
<ul>
<li><a href="/home">خانه</a></li>
<li><a href="/about">درباره ما</a></li>
<li><a href="/contact">تماس با ما</a></li>
</ul>
2. استفاده از پارشیال ویو در فایل Layout (_Layout.cshtml):
<!DOCTYPE html>
<html>
<head>
<title>@ViewData["Title"] - My Web Application</title>
<link rel="stylesheet" type="text/css" href="~/css/site.css" />
</head>
<body>
<header>
@Html.Partial("_Navigation")
</header>
<main>
@RenderBody()
</main>
<footer>
<!-- فوتر -->
</footer>
@RenderSection("Scripts", required: false)
</body>
</html>
3. استفاده از پارشیال ویو در یک ویو دیگر:
توضیحات:
پارشیال ویو (_Navigation.cshtml): شامل کد HTML برای منوی ناوبری است.
فایل Layout (_Layout.cshtml): از پارشیال ویو برای نمایش منوی ناوبری استفاده میکند.
ویو دیگر: نیز میتواند از همان پارشیال ویو استفاده کند تا منوی ناوبری را نمایش دهد.
استفاده از پارشیال ویوها باعث میشود که تکرار کدها کاهش یابد و مدیریت و نگهداری کدها سادهتر
از پارشیال ویوها در سکشنها نیز استفاده کنید. این کار به شما امکان میدهد تا محتوای تکراری را به صورت بهینه مدیریت کنید و همچنین کدهای تمیزتر و سازمانیافتهتری داشته باشید.
مثال:
فرض کنید میخواهید یک سکشن به نام Footer داشته باشید که شامل محتوای فوتر است و این محتوا در یک پارشیال ویو جداگانه قرار دارد.
ایجاد پارشیال ویو (_Footer.cshtml):
<footer>
<p>© 2024 - My Web Application</p>
</footer>
استفاده از پارشیال ویو در سکشن (_Layout.cshtml):
<!DOCTYPE html>
<html>
<head>
<title>@ViewData["Title"] - My Web Application</title>
<link rel="stylesheet" type="text/css" href="~/css/site.css" />
</head>
<body>
<header>
<nav>
<!-- نوار ناوبری -->
</nav>
</header>
<main>
@RenderBody()
</main>
<footer>
@RenderSection("Footer", required: false)
</footer>
@RenderSection("Scripts", required: false)
</body>
</html>
استفاده از سکشن در ویو (Index.cshtml):
@model YourNamespace.Models.SomeModel
<h1>Welcome to My Web Application</h1>
<p>This is the content of the home page.</p>
@section Footer {
@Html.Partial("_Footer")
}
@section Scripts {
<script src="~/js/customScript.js"></script>
}
توضیحات:
پارشیال ویو (_Footer.cshtml): شامل محتوای فوتر است.
فایل Layout (_Layout.cshtml): سکشن Footer را تعریف کرده که شامل پارشیال ویو میشود.
ویو (Index.cshtml): سکشن Footer را تعریف کرده و پارشیال ویو _Footer را در آن رندر میکند.
این کار به شما امکان میدهد تا محتوای تکراری مانند فوتر را به صورت مرکزی مدیریت کنید و در همه
میتوانید از @RenderPartial برای رندر کردن یک پارشیال ویو داخل یک سکشن استفاده کنید. معمولاً از await برای رندر کردن پارشیال ویوها به شکل غیرهمزمان استفاده میشود. با استفاده از await میتوانید به صورت بهتری از منابع سرور استفاده کنید.
مثال:
برای قرار دادن پارشیال ویوی _ValidationScriptsPartial در سکشن Scripts، به صورت زیر عمل کنید:
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
توضیحات:
await Html.RenderPartialAsync("_ValidationScriptsPartial"):
این متد به صورت غیرهمزمان پارشیال ویو _ValidationScriptsPartial را رندر میکند. استفاده از await برای رندر کردن پارشیال ویوها توصیه میشود زیرا به بهرهوری بهتر از منابع سرور کمک میکند.
به این ترتیب، اسکریپتهای اعتبارسنجی به درستی در سکشن Scripts بارگذاری میشوند و میتوانند در فرمهای شما استفاده شوند.
در ASP.NET Core، Data Annotations یکی از راههای محبوب برای اعتبارسنجی مدلها است. این Attributeها به شما امکان میدهند تا قواعد اعتبارسنجی را در سطح مدل تعریف کنید. در زیر لیستی از رایجترین Attributeهای اعتبارسنجی و توضیحات مربوط به هر یک آورده شده است:
1. [Required]
این Attribute مشخص میکند که یک فیلد اجباری است و نباید خالی باشد.
[Required(ErrorMessage = "این فیلد ضروری است")]
public string Name { get; set; }
2. [StringLength]
این Attribute طول مجاز یک رشته را مشخص میکند.
[StringLength(100, ErrorMessage = "طول رشته نباید بیش از 100 کاراکتر باشد")]
public string Description { get; set; }
3. [Range]
این Attribute محدوده مجاز برای یک عدد را مشخص میکند.
[Range(1, 100, ErrorMessage = "مقدار باید بین 1 تا 100 باشد")]
public int Age { get; set; }
4. [EmailAddress]
این Attribute مشخص میکند که فیلد باید یک آدرس ایمیل معتبر باشد.
[EmailAddress(ErrorMessage = "لطفاً یک آدرس ایمیل معتبر وارد کنید")]
public string Email { get; set; }
5. [Compare]
این Attribute برای مقایسه دو فیلد استفاده میشود. معمولاً برای اعتبارسنجی رمزهای عبور استفاده میشود.
[Compare("Password", ErrorMessage = "رمزهای عبور باید یکسان باشند")]
public string ConfirmPassword { get; set; }
6. [RegularExpression]
این Attribute برای اعتبارسنجی با استفاده از یک الگوی خاص (Regular Expression) استفاده میشود.
[RegularExpression(@"^\d{4}-\d{2}-\d{2}$", ErrorMessage = "تاریخ باید به فرم YYYY-MM-DD باشد")]
public string Date { get; set; }
7. [Phone]
این Attribute مشخص میکند که فیلد باید یک شماره تلفن معتبر باشد.
[Phone(ErrorMessage = "لطفاً یک شماره تلفن معتبر وارد کنید")]
public string PhoneNumber { get; set; }
8. [CreditCard]
این Attribute برای اعتبارسنجی شماره کارت اعتباری استفاده میشود.
[CreditCard(ErrorMessage = "لطفاً یک شماره کارت اعتباری معتبر وارد کنید")]
public string CreditCardNumber { get; set; }
9. [Url]
این Attribute مشخص میکند که فیلد باید یک URL معتبر باشد.
[Url(ErrorMessage = "لطفاً یک URL معتبر وارد کنید")]
public string Website { get; set; }
10. [Custom Validation]
شما همچنین میتوانید Attributeهای سفارشی خود را برای قواعد خاص اعتبارسنجی ایجاد کنید.
public class MyCustomValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (/* شرط معتبر بودن */)
{
return ValidationResult.Success;
}
return new ValidationResult("پیغام خطای سفارشی");
}
}
public class MyModel
{
[MyCustomValidation]
public string MyProperty { get; set; }
}
این Attributeها به شما کمک میکنند تا قواعد اعتبارسنجی مورد نیاز خود را به راحتی و به صورت متمرکز در مدلهای خود تعریف کنید. اگر نیاز به توضیحات بیشتری دارید یا پرسش دیگری در این زمینه دارید، بفرمایید!
در واقع 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 برای اعتبارسنجی دادههای ورودی استفاده کنید و پیامهای خطای مناسبی به کاربر نمایش دهید.