I have a simple form which is using ASP.NET MVC 3 unobtrusive client side validation.
The model looks a bit like this (names changed for privacy):
public class MyInputModel
{
public MyInputModel()
{
}
public MyInputModel(MyViewData viewData)
{
ViewData = viewData;
MaxValueForSize = viewData.MaxSize;
}
public int MaxValueForSize { get; set; }
[RegularExpression("[1-9][0-9]*",ErrorMessage = "The value must be a whole number.")]
public int Size { get; set; }
[StringLength(255)]
[Required]
public string Description{ get; set; }
}
In my view I put a hidden field in for MaxValueForSize and I want to compare the entered value for Size to less than or equal to the MaxValueForSize property.
I know I can do this server side by overriding validation attribute like so:
internal class SizeValidAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if(value != null)
{
var model = (MyInputModel) validationContext.ObjectInstance;
if ((int)value > model.MaxValueForSize)
return new ValidationResult(ErrorMessage);
}
return base.IsValid(value, validationContext);
}
}
However I would like to (need to) have client side validation on this property. Similar to how the Compare annotation works.
Does anyone know of a way to do this? Do I need to extend the client side validation somehow?
Thanks for your help.
Have a look at this article. It explains how to extend the ASP.NET MVC model validation to support cross-field validation:
Extending ASP.NET MVC’s Validation
http://blogs.msdn.com/b/mikeormond/archive/2010/10/05/extending-asp-net-mvc-s-validation.aspx