Trong HTML, mỗi <input />
phần tử được liên kết với một cặp giá trị và tên duy nhất (nhưng không phải là duy nhất). Cặp này được gửi trong yêu cầu tiếp theo (trong trường hợp này là phần thân yêu cầu POST) chỉ khi <input />
"thành công".
Vì vậy, nếu bạn có những đầu vào này trong <form>
DOM của bạn :
<input type="text" name="one" value="foo" />
<input type="text" name="two" value="bar" disabled="disabled" />
<input type="text" name="three" value="first" />
<input type="text" name="three" value="second" />
<input type="checkbox" name="four" value="baz" />
<input type="checkbox" name="five" value="baz" checked="checked" />
<input type="checkbox" name="six" value="qux" checked="checked" disabled="disabled" />
<input type="checkbox" name="" value="seven" checked="checked" />
<input type="radio" name="eight" value="corge" />
<input type="radio" name="eight" value="grault" checked="checked" />
<input type="radio" name="eight" value="garply" />
Sẽ tạo các cặp tên + giá trị này sẽ được gửi đến máy chủ:
one=foo
three=first
three=second
five=baz
eight=grault
Thông báo rằng:
two
và six
bị loại vì họ có tập disabled
thuộc tính.
three
đã được gửi hai lần vì nó có hai đầu vào hợp lệ có cùng tên.
four
đã không được gửi bởi vì nó checkbox
không phải làchecked
six
đã không được gửi mặc dù là checked
vì disabled
thuộc tính có quyền ưu tiên cao hơn.
seven
không có name=""
thuộc tính được gửi, vì vậy nó không được gửi.
Đối với câu hỏi của bạn: bạn có thể thấy rằng một hộp kiểm tra không được kiểm tra do đó sẽ không có cặp tên + giá trị được gửi đến máy chủ - nhưng các đầu vào khác có cùng tên sẽ được gửi cùng với nó.
Các khung như ASP.NET MVC giải quyết vấn đề này bằng cách (lén lút) ghép nối mọi checkbox
đầu vào với hidden
đầu vào trong HTML được kết xuất, như vậy:
@Html.CheckBoxFor( m => m.SomeBooleanProperty )
Riders:
<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden" name="SomeBooleanProperty" value="false" />
Nếu người dùng không chọn hộp kiểm, thì phần sau sẽ được gửi đến máy chủ:
SomeBooleanProperty=false
Nếu người dùng kiểm tra hộp kiểm, thì cả hai sẽ được gửi:
SomeBooleanProperty=true
SomeBooleanProperty=false
Nhưng máy chủ sẽ bỏ qua =false
phiên bản vì nó nhìn thấy =true
phiên bản, và vì vậy nếu không thấy =true
nó có thể xác định rằng hộp kiểm được hiển thị và người dùng không kiểm tra nó - trái ngược với các SomeBooleanProperty
đầu vào không được hiển thị.