ASP.NET MVC3 – 自定义validation属性 – >客户端损坏

我正在尝试使用客户端validation来实现自定义validation属性。

我的属性如下:

public class FileSize : ValidationAttribute, IClientValidatable { private readonly int _size; public FileSize(int size) { ErrorMessage = "Invalid size."; _size = size; } public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var rule = new ModelClientValidationRule { ValidationType = "fileSize", ErrorMessage = ErrorMessage }; rule.ValidationParameters["size"] = _size; yield return rule; } public override bool IsValid(object value) { return ((HttpPostedFileBase) value).ContentLength < _size; } } 

并且脚本在我的视图中包含如下内容:

     $(function () { $.validator.unobtrusive.adapters.addSingleVal('fileSize', 'size'); });  

问题是,即使所有这些脚本包含和注册新适配器的function,客户端validation仍然无法正常工作,它只是继续使用服务器端validation…

有任何想法吗?

你错过了一些JavaScript。

从他的高级ASP.NET MVC 3演讲中看Brad Wilsons的 “更大”示例 。

它的一些源代码:

 (function ($) { $.validator.addMethod("jqgreater", function (value, element, params) { var thisValue, otherValue; if (this.optional(element)) { // No value is always valid return true; } thisValue = parseInt(value); otherValue = parseInt($(params).val()); return thisValue > otherValue; }); function getModelPrefix(fieldName) { return fieldName.substr(0, fieldName.lastIndexOf(".") + 1); } function appendModelPrefix(value, prefix) { if (value.indexOf("*.") === 0) { value = value.replace("*.", prefix); } return value; } $.validator.unobtrusive.adapters.add("greater", ["other"], function (options) { var prefix = getModelPrefix(options.element.name), other = options.params.other, fullOtherName = appendModelPrefix(other, prefix), element = $(options.form).find(":input[name=" + fullOtherName + "]")[0]; options.rules["jqgreater"] = element; // element becomes "params" in callback if (options.message) { options.messages["jqgreater"] = options.message; } }); } (jQuery));