我實現一個自定義的驗證器來檢查是否有至少東西檢查:ASP.NET MVC 3.0驗證MVCContrib的CheckBoxList
public class AtLestOneRequiredAttribute : RequiredAttribute
{
public override bool IsValid(object value)
{
return (value != null);
}
}
public class RequiredListValidator : DataAnnotationsModelValidator<AtLestOneRequiredAttribute>
{
private readonly string errorMessage;
/// <summary>
/// Initializes a new instance of the <see cref="EmailValidator"/> class.
/// </summary>
/// <param name="metadata">The metadata.</param>
/// <param name="context">The context.</param>
/// <param name="attribute">The attribute.</param>
public RequiredListValidator(ModelMetadata metadata, ControllerContext context, AtLestOneRequiredAttribute attribute)
: base(metadata, context, attribute)
{
this.errorMessage = attribute.ErrorMessage;
}
/// <summary>
/// Retrieves a collection of client validation rules.
/// </summary>
/// <returns>A collection of client validation rules.</returns>
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
var rule = new ModelClientValidationRule
{
ErrorMessage = errorMessage,
ValidationType = "atlestonerequired"
};
return new[] { rule };
}
}
我也產生不引人注目的驗證特性對於選擇(http://weblogs.asp.net/srkirkland/archive/2011/03/08/adding-unobtrusive-validation-to-mvccontrib-fluent-html.aspx)
型號:
[AtLestOneRequired(ErrorMessage="At least one selection required")]
public IList<int> MyCheckBox{ get; set; }
查看:
@this.CheckBoxList(x => x.MyCheckBox).Options(Model.MyCheckBoxes).IncludeUnobtrusiveValidationAttributes(Html)
在結果我得到這個網站在不顯眼的屬性:
<div data-val="true" data-val-atlestonerequired="At least one selection required" id="MyCheckBox">
<input id="MyCheckBox_0" name="MyCheckBox" type="checkbox" value="1"/>
<label for="MyCheckBox_0" id="MyCheckBox_0_Label">A</label>
<input id="MyCheckBox_1" name="MyCheckBox" type="checkbox" value="2"/>
<label for="MyCheckBox_1" id="MyCheckBox_1_Label">B</label>
<input id="MyCheckBox_2" name="MyCheckBox" type="checkbox" value="3"/>
<label for="MyCheckBox_2" id="MyCheckBox_2_Label">C</label>
<input id="MyCheckBox_3" name="MyCheckBox" type="checkbox" value="4"/>
<label for="MyCheckBox_3" id="MyCheckBox_3_Label">D</label>
....
</div>
但我validaton不會對客戶端的工作,什麼是我需要做的,使其工作?我想可能是我需要實現自定義jQuery validaton方法在這種情況下,如果默認情況下它不工作?
想補充一點:
jQuery.validator.addMethod("atlestonerequired", function (value, element) {
return (value != null);
});
jQuery.validator.unobtrusive.adapters.addBool('atlestonerequired');
不起作用。
我想知道答案,就一個? :( – Maidot 2011-06-01 01:26:22
我也在尋找相同的解決方案! – imdadhusen 2011-10-18 13:47:36