Пример приложения из MSDN
И немного внутренней информации из Блог команды ADO.NET
Это можно сделать только с помощью некоторого javascript, поскольку не отмеченные флажки не передаются. Итак, вам нужен javascript, который, например, неявно добавляет скрытые поля при снятии флажка. Без javascript это было бы невозможно.
Обычный способ решения этой проблемы - перенос скрытой переменной вместе с каждым флажком.
<input type="checkbox" name="mycheckbox" />
<input type="hidden" name="mycheckbox.hidden"/>
На стороне сервера мы сначала обнаруживаем список скрытых переменных и для каждой скрытой переменной мы пытаемся увидеть, отправлена ли соответствующая запись флажка в данные формы или нет.
Алгоритм на стороне сервера, вероятно, будет выглядеть так:
for input in form data such that input.name endswith .hidden
checkboxName = input.name.rstrip('.hidden')
if chceckbName is not in form, user has unchecked this checkbox
Вышеупомянутое не совсем отвечает на вопрос, но предоставляет альтернативные средства достижения аналогичной функциональности.
Вы можете использовать Javascript в событии отправки формы. Это все, что вы можете сделать, браузеры никак не могут сделать это сами. Это также означает, что ваша форма не работает для пользователей без Javascript.
Лучше знать на сервере, какие есть флажки, чтобы вы могли сделать вывод, что те, которые отсутствуют в опубликованных значениях формы ( $ _ POST
в PHP), не отмечены.
Решение, которое мне больше всего понравилось, это поставить скрытый вход с тем же именем, что и флажок, который может не быть отмечен. Я думаю, что это работает так, что если флажок не установлен, то скрытый ввод все равно будет успешным и отправлен на сервер, но если флажок установлен, то он переопределит скрытый ввод перед ним. Таким образом, вам не нужно будет отслеживать, какие значения в размещенных данных ожидались от чекбоксов.
<form>
<input type='hidden' value='0' name='selfdestruct'>
<input type='checkbox' value='1' name='selfdestruct'>
</form>