javascript - Client-side custom annotation validation not working -
i trying client-side validation working custom annotations in asp.net mvc app. sorry lengthy post.
here custom attribute:
public class customstringlengthattribute : validationattribute, iclientvalidatable { public int maxlength { get; private set; } public int minlength { get; set; } public customstringlengthattribute(int maxlength) : base(getdefaulterrormessage) { maxlength = maxlength; } private static string getdefaulterrormessage() { homecoming "max length {1}"; } public override string formaterrormessage(string name) { homecoming string.format(errormessagestring, name, maxlength, minlength); } protected override validationresult isvalid(object value, validationcontext validationcontext) { ... if (length > maxlength || length < minlength) homecoming new validationresult(formaterrormessage(validationcontext.displayname)); homecoming validationresult.success; } public ienumerable<modelclientvalidationrule> getclientvalidationrules(modelmetadata metadata, controllercontext context) { var rule = new modelclientvalidationrule(); rule.errormessage = formaterrormessage(metadata.getdisplayname()); rule.validationtype = "customstringlength"; rule.validationparameters.add("max", maxlength); rule.validationparameters.add("min", minlength); yield homecoming rule; } } i utilize attribute in view model:
[customstringlength(25)] public virtual string billaddress1 { get; set; } the data- attributes appear generated should:
<input data-val="true" data-val-customstringlength="max length 25" data-val-customstringlength-max="25" data-val-customstringlength-min="0" id="billaddress1" name="billaddress1" type="text" value=""> the client-side validation kicks in, "uncaught typeerror: cannot read property 'call' of undefined" in jquery.validate.js
this "check: function(element) ..." in jquery.validate.js - method variable "undefined":
looking @ rules variable explains why method variable undefined - reason array containing min , max parameters "undefined" instead of beingness named "customstringlength":
but why "undefined"??
here customvalidation.js, add together adapter, etc:
(function ($) { if ($.validator && $.validator.unobtrusive) { $.validator.unobtrusive.adapters.addminmax("customstringlength", "min", "max"); $.validator.addmethod("customstringlength", function (value, element, min, max) { if (value) { if (value.length < min || value.length > max) { homecoming false; } } homecoming true; }); } }(jquery)); here invoke validation form:
function validateform(form) { preparevalidationscripts(form); var validator = $.data(form[0], 'validator'); homecoming validator.form(); } function preparevalidationscripts(form) { if (form.executed) return; form.removedata("validator"); $.validator.unobtrusive.parse(document); form.executed = true; } i have been staring @ long - missing??
i got working! decided not seek utilize "convenience" addminmax adapter, instead write custom adapter. here updated customvalidation.js (everything else stays same):
(function ($) { if ($.validator && $.validator.unobtrusive) { $.validator.unobtrusive.adapters.add('customstringlength', ['min', 'max'], function(options) { options.rules['customstringlength'] = { min: options.params.min, max: options.params.max, }; options.messages['customstringlength'] = options.message; }); $.validator.addmethod('customstringlength', function (value, element, params) { if (value) { if (value.length < params.min || value.length > params.max) { homecoming false; } } homecoming true; }); } }(jquery)); javascript asp.net-mvc jquery-validate unobtrusive-validation
No comments:
Post a Comment