1
我只是列出複選框,選擇語言的開發人員才華橫溢。我想驗證至少必須選擇一種語言。無法獲得它的工作客戶端驗證IEnumerable <T>在MVC3
服務器端驗證工作沒有失敗。但是我一直無法得到它在客戶端工作。 即使「GetClientValidationRules」方法從未稱爲。這就是我好奇的一點。
是否IEnumerable不支持客戶端驗證?這樣做的方式是什麼?
PS:我neednt把JS驗證碼,因爲我認爲這將是一次OK GetClientValidationRules被稱爲
查看:(簡化爲簡潔起見)
public class DeveloperViewModel
{
[DeveloperLanguageSelectOneValidation(ErrorMessage="Please check at least one lang")]
public IEnumerable<SelectListItem> LanguagesModel { get; set; }
}
驗證:
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查看:
@model SelectListItem
<li>
@Html.HiddenFor(a => a.Value)
@Html.CheckBoxFor(a => a.Selected)
@Html.DisplayFor(a => a.Text)
</li>
開發人員查看:
<ul>
@Html.EditorFor(a => a.LanguagesModel)</ul>
@Html.ValidationMessageFor(a => a.LanguagesModel)
感謝reply.Is有任何機會來解決這個驗證在不顯眼的方式? – sercan