Asp.net mvc 3 无法在MVC3中对IEnumerable进行客户端验证
我只是列出一些复选框来选择开发人员有天赋的语言。我喜欢验证至少必须选择一种语言 服务器端验证工作没有失败。但是我一直无法在客户端让它工作。甚至GetClientValidationRules方法也从未调用过。这是我好奇的一点 客户端验证是否不支持IEnumerable?有什么方法可以做到这一点 ps:我不需要输入js验证代码,因为我认为一旦调用GetClientValidationRules就可以了 视图:为简洁起见进行了简化Asp.net mvc 3 无法在MVC3中对IEnumerable进行客户端验证,asp.net-mvc-3,unobtrusive-validation,Asp.net Mvc 3,Unobtrusive Validation,我只是列出一些复选框来选择开发人员有天赋的语言。我喜欢验证至少必须选择一种语言 服务器端验证工作没有失败。但是我一直无法在客户端让它工作。甚至GetClientValidationRules方法也从未调用过。这是我好奇的一点 客户端验证是否不支持IEnumerable?有什么方法可以做到这一点 ps:我不需要输入js验证代码,因为我认为一旦调用GetClientValidationRules就可以了 视图:为简洁起见进行了简化 public class DeveloperViewModel {
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 };
}
}
选择列表项目视图:
@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)
使用jquery怎么样
$.validator.addMethod('require-one', function(value) {
return $('.require-one:checked').size() > 0;
}, 'Please check at least one box.');
var checkboxes = $('.require-one');
var checkbox_names = $.map(checkboxes, function(e, i) {
return $(e).attr("name")
}).join(" ");
$("#itemForm").validate({
groups: {
checks: checkbox_names
},
errorPlacement: function(error, element) {
if (element.attr("type") == "checkbox") error.insertAfter(checkboxes.last());
else error.insertAfter(element);
}
});
您的表格:
<form name="itemForm" id="itemForm" method="post">
<label for="checkbox1">checkbox1</label>
<input checked="checked" data-val="true" data-val-required="The checkbox1 field is required." id="checkbox1" name="checkbox1" type="checkbox" value="true" class="require-one" />
<input name="checkbox1" type="hidden" value="false" /><br />
<label for="checkbox2">checkbox2</label>
<input checked="checked" data-val="true" data-val-required="The checkbox2 field is required." id="checkbox2" name="checkbox2" type="checkbox" value="true" class="require-one" />
<input name="checkbox2" type="hidden" value="false" /><br />
<label for="checkbox3">checkbox3</label>
<input checked="checked" data-val="true" data-val-required="The checkbox3 field is required." id="checkbox3" name="checkbox3" type="checkbox" value="true" class="require-one" />
<input name="checkbox3" type="hidden" value="false" /><br />
<input type="submit" />
</form>
发件人:谢谢您的回复。是否有机会以不引人注目的方式进行此验证?