I simply list the checkboxes to select languages whose a developer get talented.I like to put a validation that at least one language must be selected.
Server side validation works with no fail.However i have not been able to get it work at client side.Even "GetClientValidationRules" method never called.Thats the point i curiosly wonder.
Is IEnumerable not supported for clientside validation ?What is the ways of doing this?
ps:I neednt to put the js validation codes because i think it will be ok once GetClientValidationRules is called
View: (Simplified for brevity)
public class DeveloperViewModel
{
[DeveloperLanguageSelectOneValidation(ErrorMessage="Please check at least one lang")]
public IEnumerable<SelectListItem> LanguagesModel { get; set; }
}
Validation:
public class DeveloperLanguageSelectOneValidationAttribute : ValidationAttribute ,IClientValidatable
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
IEnumerable<SelectListItem> items = (IEnumerable<SelectListItem>)value;
foreach (var item in items)
if (item.Selected)
return ValidationResult.Success;
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule()
{
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
ValidationType = "developerlanguageselectone"
};
return new[] { rule };
}
}
SelectListItem View:
@model SelectListItem
<li>
@Html.HiddenFor(a => a.Value)
@Html.CheckBoxFor(a => a.Selected)
@Html.DisplayFor(a => a.Text)
</li>
Developer View :
<ul>
@Html.EditorFor(a => a.LanguagesModel)</ul>
@Html.ValidationMessageFor(a => a.LanguagesModel)