2015-08-14 114 views
1

我想验证mvc5中所需的复选框。在大多数情况下,其验证/工作...我的问题是其不触发ErrorMessage。换句话说,它阻止我提交时未检查,但没有显示请接受条款&条件为其应该。ASP.NET MVC 5 - 用于验证复选框的自定义属性

我下面

自定义属性代码验证复选框

namespace Checkboxtest.Models 
{ 
    //Making Custom attribute for validating checkbox 
    // IClientValidatable for client side Validation 
    public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable 
    { 
     public override bool IsValid(object value) 
     { 
      return value != null && value is bool && (bool)value; 
     } 
     // Implement IClientValidatable for client side Validation 
     public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
     { 
      return new ModelClientValidationRule[] { 
new ModelClientValidationRule { ValidationType = "checkboxtrue", ErrorMessage = this.ErrorMessage } }; 
     } 
    } 
} 

域模型

[Display(Name = "Terms and Conditions")] 
    [MustBeTrue(ErrorMessage = "Please Accept the Terms & Conditions")] 
    public bool TermsAndConditions { get; set; } 

复选框形式

  @using (Html.BeginForm()) 
      { 
       <div class="form-group"> 
        @Html.CheckBoxFor(x => x.TermsAndConditions) 
        @Html.LabelFor(x => x.TermsAndConditions) 
        @Html.ValidationMessageFor(x => x.TermsAndConditions) 
       </div> 
       <button type="submit" class="btn btn-success submit">Submit</button> 
      } 

任何人都可以让我知道了什么我做错了?谢谢!

+0

你已经加入这个布局? @ Scripts.Render(“〜/ bundles/jquery”) @ Scripts.Render(“〜/ bundles/jqueryval”) – Johan

回答

0

下面是修改这应有助于:

namespace Checkboxtest.Models 
{ 
    //Making Custom attribute for validating checkbox 
    // IClientValidatable for client side Validation 
    public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable 
    { 
     private const string defaultError = "'{0}' must be true."; 
     public MustBeTrueAttribute() : base(defaultErrorMessage) 
     { 
     } 

     public override bool IsValid(object value) 
     { 
      return value != null && value is bool && (bool)value; 
     } 
     // Implement IClientValidatable for client side Validation 
     public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
     { 
      return new ModelClientValidationRule[] { 
      new ModelClientValidationRule { ValidationType = "checkboxtrue", ErrorMessage = this.ErrorMessage } }; 
     } 
    } 

    public override string FormatErrorMessage(string name) 
    { 
     return String.Format(ErrorMessageString, name); 
    } 
}