рдирдорд╕реНрддреЗ,
рдореИрдВ рдПрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рд╣реИ [Required]
-decorated рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдХрд┐ рд▓рд╛рдЧреВ IValidatableObject
ред рдореЙрдбрд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрддреНрддрд┐ рд╢реВрдиреНрдп рд╣реИ, рддреЛ рд╡рд╕реНрддреБ рдХреА Validate()
рд╡рд┐рдзрд┐ рдХреЛ рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ Validate()
рдХреЗрд╡рд▓ рддрднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд┐рд╢реЗрд╖рддрд╛-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕рддреНрдпрд╛рдкрди рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдкреНрд░рдкрддреНрд░ рд╕рдмрдорд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдкрд╣рд▓реЗ рдЕрдиреБрдкрд▓рдмреНрдз рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрдЦрддреЗ рд╣реИрдВред рдлрд┐рд░, рдПрдХ рдмрд╛рд░ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдиреЗ рдФрд░ рдлрд╝реЙрд░реНрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕ рдмрд╛рд░, Validate()
рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рддред рдХреНрдпрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ _all_ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрдм рд╡реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВ?
рдзрдиреНрдпрд╡рд╛рдж,
рдмреЗрди
рд╕рдВрд╕реНрдХрд░рдг: ASP.Net рдХреЛрд░ 1.1.0/.Net 4.6.1
public class Import : IValidatableObject
{
[Required]
public IFormFile File { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { /* ... */ }
//...
}
_рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ:_
[HttpPost, ActionName("Index")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> IndexPost()
{
var model = new ViewModels.Import();
var bindingResult = await TryUpdateModelAsync(model, "", i => i.StartDate, i => i.EndDate, i => i.ImportTypeId, i => i.File);
if (!bindingResult || ModelState.ValidationState != ModelValidationState.Valid) {
return View(model);
}
// ...
}
рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ рдЬреЛ Validate() рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ 3 рдорд╣реАрдиреЗ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдЧрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рд╣рдо рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрджреНрдпрддрди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рд▓реЙрдЧ рдХрд░реЗрдВ рдФрд░ рд╣рдо рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред
рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрднрд╡ Asp.Net Core 2.0 рдореЗрдВ рднреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдВрджрд░реНрднрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ IValidatableObject
рд▓рдХреНрд╖реНрдпреАрдХрд░рдг .Net Standard 2.0 рд╣реИред
рдпрд╣ рддрдм рддрдХ рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рд╕рднреА [Required]
рд╕рддреНрдпрд╛рдкрди рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ Validate()
рдореЗрдВ рдХрд╕реНрдЯрдо рд╕рддреНрдпрд╛рдкрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдореЙрдбрд▓рд╕реНрдЯреЗрдЯ рдореЗрдВ рдХреБрдЫ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
modelstate
рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫред рдореИрдВрдиреЗ рдЕрдиреНрдп рдорд╛рдирдХ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдЬреИрд╕реЗ [StringLength()]
рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╖реНрдЯрдкреНрд░рдж рдмрдЧ рд╣реИред рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмрдВрдж рдХрд░реЗрдВ?
рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк IValidatableObject рдкрд╛рддреЗ рд╣реИрдВред рдКрдкрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдорд╛рдиреНрдп рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдореБрджреНрджрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдмреАрдЪ рдореБрдЭреЗ рдРрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИ:
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╕реВрдЪреА
{
рд╡рд░ newErrors = рдирдИ рд╕реВрдЪреА
var validator = new DataAnnotationsValidator();
var results = new List<ValidationResult>();
var isValid = validator.TryValidate(command, out results);
if (!(command is UpdatePromotionCommand cpc))
return newErrors;
newErrors.AddRange(ValidateDatesAreValidFormat(cpc));
if (
!string.IsNullOrEmpty(cpc.PurchasePeriodStart)
&& !string.IsNullOrEmpty(cpc.PurchasePeriodEnd)
&& DateTime.TryParse(cpc.PurchasePeriodStart, out DateTime purchasePeriodStartDate)
&& DateTime.TryParse(cpc.PurchasePeriodEnd, out DateTime purchasePeriodEndDate)
&& purchasePeriodStartDate > purchasePeriodEndDate
)
{
newErrors.Add(new ECError("Purchase Period End cannot be before Purchase Period Start."));
}
if (
!string.IsNullOrEmpty(cpc.ClaimPeriodStart)
&& !string.IsNullOrEmpty(cpc.ClaimPeriodEnd)
&& DateTime.TryParse(cpc.ClaimPeriodStart, out DateTime claimPeriodStartDate)
&& DateTime.TryParse(cpc.ClaimPeriodEnd, out DateTime claimPeriodEndDate)
&& claimPeriodStartDate > claimPeriodEndDate
)
{
newErrors.Add(new ECError("Claim Period End cannot be before Claim Period Start."));
}