2013-02-20 32 views
7

có một ViewModel đơn giản với ba đặc tính như vậy:tài sản bool mà không Thuộc tính bắt buộc là cần thiết

public bool RememberMe { get; set; } 

Theo quan điểm của tôi, tôi có một đơn giản @Html.CheckBoxFor(p => p.RememberMe) Tôi đang sử dụng xác nhận Client Side kích hoạt sử dụng Html.EnableClientValidation();

Tại sao điều này có được đặt làm trường bắt buộc không?

+0

Nó không liên quan đến lỗi này trong một số trình duyệt cũ hơn phải không? https://github.com/jzaefferer/jquery-validation/issues/598 –

+0

Bạn có thể sử dụng 'bool? 'cho thuộc tính hoặc sử dụng đầu vào bị ẩn () –

Trả lời

8

Thử bool có thể vô hiệu hóa.

public bool? RememberMe { get; set; } 

Với loại tham chiếu có một số quy tắc xác thực mặc định được áp dụng. Nếu một kiểu tham chiếu không phải là nullable, nó sẽ trở thành bắt buộc theo mặc định. Hình minh họa tốt nhất của việc này là nếu bạn sử dụng một textbox để hiển thị một số tài sản (không phải cái gì bạn sẽ làm gì trong trang web của bạn, nhưng tốt cho mục đích thử nghiệm):

mẫu:

public bool? MyBool { get; set; } 
public int MyInt { get; set; } 

Xem:

@Html.TextBoxFor(p => p.MyBool) 
@Html.TextBoxFor(p => p.MyInt) 

Bạn có thể nhìn thấy từ một nguồn xem những gì xảy ra trên trang:

<input id="MyNullBool" name="MyNullBool" type="text" value=""> 
<input data-val="true" data-val-required="The MyBool field is required." id="MyBool" name="MyBool" type="text" value="False"> 
<input data-val="true" data-val-number="The field MyInt must be a number." data-val-required="The MyInt field is required." id="MyInt" name="MyInt" type="text" value="0"> 

các nul lable bool không có thuộc tính xác nhận, trong khi bool có một thẻ data-val-required. Thẻ int có một thẻ data-val-required và một số data-val-number thuộc tính

Tất nhiên, trên hộp kiểm này chỉ có thể kiểm tra (đúng) hoặc không được chọn (sai) nên thẻ bắt buộc không được sử dụng nhiều.

+0

Cũng lưu ý rằng mvc sẽ xác nhận mô hình khi nó được đăng lại vì vậy nếu bạn đặt một cái gì đó mà nó không thể liên kết với một bool trong hộp văn bản, ModelState.IsValid sẽ là sai và có một lỗi ModelState. –

+0

Thú vị nhưng tôi cho rằng nó có ý nghĩa bây giờ. Tôi nhận thấy trong ví dụ của bạn, bạn đang sử dụng một loại văn bản đầu vào thay vì Html.CheckBoxFor; điều này có nghĩa là helper checkbox là vô dụng? – Victor

+0

Tôi chỉ sử dụng đầu vào để làm cho ví dụ rõ ràng hơn. :-) –

-2
@Html.CheckBoxFor(c => c.TermsAndConditions, new { required = "required" }) 
@Html.ValidationMessageFor(c => c.TermsAndConditions, "you must agree to terms and conditions of Service.)" 
Các vấn đề liên quan