2011-01-17 25 views
26

Hy vọng rằng một câu hỏi dễ dàng cho bạn asp.net MVC rất kinh nghiệm:Html.CheckBox trả về false nếu tàn tật, thậm chí nếu seleced

Tôi có một hộp kiểm, được tạo ra như thế này:

<%=Html.CheckBox("MyCheckBox", true, new { disabled = "disabled"})%> 

Trong hành động tôi tôi đang kiểm tra giá trị như vậy:

bool isChecked = form["MyCheckBox"].Contains("true"); 

Tôi mong đợi điều này sẽ trả lại giá trị đúng, vì nó được chọn. Tuy nhiên, phần tử ẩn được tạo có giá trị sai:

<input checked="checked" disabled="disabled" id="MyCheckBox" name="MyCheckBox" type="checkbox" value="true" /> 
<input name="MyCheckBox" type="hidden" value="false" /> 

Trước tiên, có cách nào để làm cho HtmlHelper hoạt động như tôi mong đợi không? Hoặc là tự xây dựng đầu vào/tạo phương thức trợ giúp của riêng tôi theo cách duy nhất? (không phải đây là một việc lớn ...)

Thứ hai, bất cứ ai có thể làm sáng tỏ một số lý do tại sao các hộp kiểm hoạt động theo cách này? Tôi không chính xác trong giả sử một hộp kiểm bị vô hiệu hóa được đánh dấu nên == đúng? Trạng thái vô hiệu có nghĩa là sai?

+0

giải pháp ở đây: [cách POST/Gửi Hộp kiểm đầu vào bị vô hiệu hóa?] (http://stackoverflow.com/questions/4727974/how-to-post-submit-an-input-checkbox-that-is-disabled) –

Trả lời

31

Trường nhập được đánh dấu bằng thuộc tính disabled="disabled"KHÔNG BAO GIỜ gửi giá trị của nó tới máy chủ. Nếu bạn muốn đạt được điều này, bạn có thể sử dụng thuộc tính readonly="readonly" mà vẫn ngăn người dùng sửa đổi giá trị nhưng gửi giá trị hiện tại khi biểu mẫu được gửi.

+2

+1: Tôi thấy điều này một cách khó khăn không lâu trước đây vì tôi cũng là người mới bắt đầu trong MVC. Tuy nhiên, bạn có một gợi ý tốt nếu nó là một lĩnh vực đầu vào và tôi muốn làm cho nó bị vô hiệu hóa/chỉ đọc? Hiện tại, thiết lập "chỉ đọc" không làm xám trường nhập như nó làm cho "bị tắt". – VoodooChild

+4

@VoodooChild, vâng điều đó xảy ra với FireFox và hộp kiểm. Cách giải quyết thông thường liên quan đến 'bị vô hiệu hóa' với một trường ẩn lùi. –

+1

Cảm ơn, tôi không biết điều đó. Tôi đã đi với một HtmlHelper tùy chỉnh sử dụng thuộc tính 'bị vô hiệu hóa' và hiển thị một trường ẩn. – elwyn

2

1) Từ quan điểm của tôi, không có cách nào thay đổi hành vi của phương thức Html.CheckBox. Tôi đã phải đối mặt với vấn đề thời gian trước đây và tôi đã kết thúc bằng tay xây dựng hộp kiểm đầu vào như bạn đề nghị. Để xây dựng hộp kiểm đầu vào không phải là luôn luôn là địa ngục như bằng cách sử dụng các phương pháp trợ giúp không phải luôn luôn là eaven. Tất nhiên biulding phương pháp trợ giúp của riêng bạn có thể là choise đúng.

2) Trường nhập bị tắt không được đăng khi biểu mẫu được gửi; tôi sẽ mong đợi hộp kiểm nhập bị tắt, được gửi, được kiểm tra hay không.

Chúng tôi có thể tranh luận về lựa chọn mà MVC đã sử dụng để tiếp nhận trên trường ẩn đầu vào để đẩy vào yêu cầu hộp kiểm, khi hộp kiểm không được chọn. Hiệu ứng phụ của của lựa chọn này là chúng tôi sẽ tìm thấy tên hộp kiểm trong số các dữ liệu đã đăng ngay cả khi hộp kiểm bị tắt không đồng ý với những gì đã nêu ở trên là: trường nhập bị vô hiệu hóa không được đăng khi biểu mẫu được gửi

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