2014-09-30 15 views
10

Tôi có một mô hình lớp học như:Làm thế nào để thêm thuộc tính yêu cầu boolean trong mvc?

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; } 
} 

Ở đây tôi đã tạo ra một tài sản BooleanIsActive với Required thuộc tính, nhưng vấn đề là quan điểm của tôi là không thực hiện xác nhận yêu cầu cho khách sạn này? Tôi muốn liên kết thuộc tính này với một số CheckBox và kiểm tra xem CheckBox này có được kiểm tra và chạy xác thực nếu không.

Bất kỳ giải pháp nào cho điều này?

+2

Đừng nghĩ rằng bạn có thể làm điều đó với yêu cầu. Có một cái nhìn ở đây. Điều này có thể giúp http://www.jasonwatmore.com/post/2013/10/16/ASPNET-MVC-Required-Checkbox-with-Data-Annotations.aspx – mjroodt

+0

Thuộc tính 'Bắt buộc' chỉ có nghĩa là thuộc tính phải có một giá trị. Trong trường hợp của boolean (checkbox) giá trị false (hoặc bỏ chọn) vẫn là một câu trả lời hợp lệ. – DavidG

+0

trùng lặp có thể có của [Làm cho giá trị boolean của mô hình trở thành sự thật bằng chú thích dữ liệu] (http://stackoverflow.com/questions/6986928/enforcing-a-models-boolean-value-to-be-true-using-data- chú thích) – DavidG

Trả lời

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

Cảm ơn, điều này đã hoạt động tốt. Cách giải quyết thú vị để tránh tạo phương thức xác thực riêng biệt. – sukotto1

6

Cảm ơn giải pháp trên đã đưa tôi đi đúng hướng, nhưng đối với tôi nó không hoạt động tốt. Tôi cần thêm kịch bản bên dưới vào trang mở rộng trình xác thực jquery để có được giải pháp trên. Nghĩ đến việc chia sẻ điều này nếu có ai đó gặp phải vấn đề tương tự.

<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

Hãy để tôi thêm một chút để Sonu K bài

Nếu bạn sử dụng xác nhận HTML trên nó (<input type="checkbox" required/>) nó có thể kết thúc phá vỡ javascript của bạn từ ngăn cản bạn phải nộp một trường bắt buộc trống thiết lập từ mẫu của bạn

Cuối cùng, nếu bạn không muốn Is Active được bổ sung vào cơ sở dữ liệu khi thực hiện chuyển đổi (mã đầu tiên) chỉ cần thêm [NotMapped]

Full đang

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

vì nó được đặt là đúng theo mặc định trong MVC mặc dù nó sẽ hiển thị không chọn trên trình duyệt, vì vậy xác thực có thể không hoạt động như bạn mong đợi, đó là lý do bạn phải thêm mã javascript này vào xác nhận.

<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> 

Thưởng thức mã hóa

Các vấn đề liên quan