рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореИрдВрдиреЗ ASP.NET MVC рдкрд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдореЗрд░реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрддреНрд╡ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдлрд╛рд░реНрдо рддрддреНрд╡ рдХреА рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд░рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред рдпрд╣реА рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╕рд╛рдЗрдЯ рдХреЛ рдореЛрдЯрд░ рд╡рд╛рд╣рди рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрдВрдЬреАрдХрд░рдг рдлреЙрд░реНрдо рдкрд░ рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджрд┐рдЦрд╛рдИ рджреАред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдирд┐рдЬреА рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдПрдХ рдСрдЯреЛ рдбреАрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдСрдЯреЛ рдбреАрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкреВрд░реА рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдЪрд░рдг рдореЗрдВ рд╣реЛред
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб
рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ ValidationAttribute рд╡рд░реНрдЧ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)] public sealed class RequiredIfAttribute : ValidationAttribute, IClientValidatable {
рд╣рдо рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ _defaultErrorMessage рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рджреЛ рдлрд╝реАрд▓реНрдбреНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛ _targetPropertyName рдФрд░ _targetPropertyCondition, рдЬреЛ рдореЙрдбрд▓ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрддрдорд╛рди рдлрд╝реАрд▓реНрдб рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдПрдЧреА (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ) рдФрд░ рдХреНрд░рдорд╢рдГ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдореВрд▓реНрдпред
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ IClientValiditable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред GetClientValidationRules рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рдирдпрд╛ рдирд┐рдпрдо рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢, рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рд╛рде рд╣реА рд╣рдорд╛рд░реЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рдм рдлреЙрд░реНрдо рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред

рдЧреНрд░рд╛рд╣рдХ рднрд╛рдЧ
рдЗрд╕ рдкрд░, рд╕рд░реНрд╡рд░ рднрд╛рдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЪрд▓реЛ рдЧреНрд░рд╛рд╣рдХ рднрд╛рдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдирд╛ рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╣рдорд╛рд░реЗ рдПрдбрд╛рдкреНрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
$(function () { $.validator.addMethod("requiredif", function (value, element, param) { if ($(param.propertyname).is(':checked').toString() == param.propertyvalue) { if (!this.depend(param, element)) return "dependency-mismatch"; switch (element.nodeName.toLowerCase()) { case 'select': var val = $(element).val(); return val && val.length > 0; case 'input': if (this.checkable(element)) return this.getLength(value, element) > 0; default: return $.trim(value).length > 0; } } return true; }); $.validator.unobtrusive.adapters.add("requiredif", ["targetpropertyname", "targetpropertyvalue"], function (options) { if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") { options.rules["requiredif"] = { propertyname: "#" + options.params.targetpropertyname, propertyvalue: options.params.targetpropertyvalue }; options.messages["requiredif"] = options.message; } }); } (jQuery));
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдореЗрдВ RequiredIf рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
public class RegisterModel { [Required] [Display(Name = "First name")] public string FirstName { get; set; } [Required] [Display(Name = "Last name")] public string LastName { get; set; } [Required] [DataType(DataType.EmailAddress)] [Display(Name = "Email address")] [RegularExpression("^([A-Za-z0-9_\\-\\.])+\\@([A-Za-z0-9_\\-\\.])+\\.([A-Za-z]{2,4})$", ErrorMessage = "Not a valid email.")] public string Email { get; set; } [Display(Name = "Dealer")] public bool IsDealer { get; set; } [RequiredIf("IsDealer", true)] [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)] [Display(Name = "Dealer name")] public string Name { get; set; } }
рдФрд░ рдкреЗрдЬ рдкрд░ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рдЬреЛрдбрд╝реЗрдВ:
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.requiredif.js")" type="text/javascript"></script>
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдорд┐рд▓рд╛ рдЬреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рддрд░рдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

рдкреБрдирд╢реНрдЪ: ASP.NET MVC3 рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдиреАрдд рдорд╛рдиреНрдпрддрд╛ рдХрд╛ рдореЛрдб рдЕрдХреНрд╖рдо рд╣реИред рдЖрдк рдЗрд╕реЗ рджреЛ рддрд░рд╣ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Web.config рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:
<appSettings> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
рдЖрдк рдХреЛрдб рдореЗрдВ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
HtmlHelper.ClientValidationEnabled = true; HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
рдФрд░ рдЖрдкрдХреЛ рджреГрд╢реНрдп рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>