2014-09-30 43 views
10

我已經一個模型類,如:如何在mvc中添加boolean必需屬性?

public class Student 
{ 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
    [Display(Name = "Enrollment Date")] 
    public DateTime EnrollmentDate { get; set; } 

    [Required] 
    [Display(Name = "Is Active")] 
    public bool IsActive { get; set; } 

    public virtual ICollection<Enrollment> Enrollments { get; set; } 
} 

在這裏,我已經創建了一個Boolean財產IsActiveRequired屬性,但問題是,我的看法是不執行所需的驗證此屬性?我想將此屬性與CheckBox綁定,並檢查此CheckBox是否已選中,如果不是,則運行驗證。

任何解決方案?

+2

不要以爲你可以要求做。看看這裏。這可能有助於http://www.jasonwatmore.com/post/2013/10/16/ASPNET-MVC-Required-Checkbox-with-Data-Annotations.aspx – mjroodt 2014-09-30 13:38:22

+0

「必需」屬性僅表示屬性必須具有一個值。在布爾(複選框)的情況下,值false(或未選中)仍然是有效的答案。 – DavidG 2014-09-30 13:38:37

+0

[使用數據註釋強制模型的布爾值爲true]的可能重複(http://stackoverflow.com/questions/6986928/enforcing-a-models-boolean-value-to-be-true-using-data-註釋) – DavidG 2014-09-30 13:38:58

回答

21
[Display(Name = "Is Active")] 
[Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")] 
public bool IsActive { get; set; } 
+3

謝謝,這工作得很好。有趣的解決方法,以避免創建一個單獨的驗證方法。 – sukotto1 2015-10-22 13:05:25

6

感謝上述解決方案,這使我朝着正確的方向發展,但對我而言,這並沒有奏效。我需要將下面的腳本添加到擴展jquery驗證器的頁面以獲得上述解決方案。如果有人遇到類似的問題,可以分享這個想法。

<script> 
     // extend jquery range validator to work for required checkboxes 
     var defaultRangeValidator = $.validator.methods.range; 
     $.validator.methods.range = function(value, element, param) { 
      if(element.type === 'checkbox') { 
       // if it's a checkbox return true if it is checked 
       return element.checked; 
      } else { 
       // otherwise run the default validation function 
       return defaultRangeValidator.call(this, value, element, param); 
      } 
     } 
</script> 
0

讓我一點點添加到Sonu K

如果你使用它(<input type="checkbox" required/>)HTML驗證它可能最終會從防止你破壞你的JavaScript提交一個空的必填字段從模型

設置

最後,如果你不希望Is Active在做遷移時添加到數據庫(第一個代碼),只需添加[NotMapped]

的完整代碼

[NotMapped] 
[Display(Name = "Is Active")] 
[Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")] 
public bool IsActive { get; set; } 

,因爲它是在MVC儘管它會顯示取消在瀏覽器上,這樣你指望它驗證可能無法正常工作設置爲默認值爲TRUE,這就是爲什麼你要加這段JavaScript代碼完善驗證。

<script> 
      // extend jquery range validator to work for required checkboxes 
      var defaultRangeValidator = $.validator.methods.range; 
      $.validator.methods.range = function(value, element, param) { 
       if(element.type === 'checkbox') { 
        // if it's a checkbox return true if it is checked 
        return element.checked; 
       } else { 
        // otherwise run the default validation function 
        return defaultRangeValidator.call(this, value, element, param); 
       } 
      } 
     </script> 

享受編碼