我正在尝试使用客户端验证来实现自定义验证属性.
我的属性如下:
public class FileSize : ValidationAttribute, IClientValidatable
{
private readonly int _size;
public FileSize(int size)
{
ErrorMessage = "Invalid size.";
_size = size;
}
public IEnumerable<ModelClientValidationRule> 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;
}
}
Run Code Online (Sandbox Code Playgroud)
并且脚本在我的视图中包含如下内容:
<script src="@Url.Content("~/Scripts/jquery-1.4.4.js")" type="text/javascript"></script>
<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>
<script type="text/javascript">
$(function () { …Run Code Online (Sandbox Code Playgroud) 我创建了一个从ValidationAttribute派生的自定义验证器.我的undertsandng是它将为客户端脚本生成足够的元数据以自动验证(使用jquery.validate).自定义验证器在服务器端正常工作.但它不会在客户端激发错误消息.(其他默认验证器,如"StringLength"在客户端也正常工作.)我们如何纠正它?
public class Person
{
[Required(ErrorMessage = "First name required")]
public string FirstName { get; set; }
[CustomStartLetterMatch("FirstName")]
[StringLength(5,ErrorMessage = "Must be under 5 characters")]
public string LastName { get; set; }
[Range(18,50,ErrorMessage="Must be between 18 and 50")]
public int Age { get; set; }
}
public sealed class CustomStartLetterMatch : ValidationAttribute
{
private const string _defaultErrorMessage = " First letter of '{0}' must be same as first letetr of '{1}'";
private string _basePropertyName;
public CustomStartLetterMatch(string basePropertyName)
: base(_defaultErrorMessage)
{ …Run Code Online (Sandbox Code Playgroud)