Monday, 15 August 2011

javascript - Client-side custom annotation validation not working -



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