У меня есть следующий код:
(some.aspx.cs)
if(Page.IsPostBack)
{
bool apple2 = false;
bool pizza2 = false;
bool orange2 = false;
if (apple.Checked)
apple2 = true;
if (pizza.Checked)
pizza2 = true;
if (orange.Checked)
orange2 = true;
}
(some.aspx)
<tr>
<td>Food:</td>
<td>Apple <input type="checkbox" name="food" id="apple" value="apple" runat="server" />Pizza <input type="checkbox" name="food" id="pizza" value="pizza" runat="server" />Orange <input type="checkbox" name="food" id="orange" value="orange" runat="server" /></td>
</tr>
Теперь, я отправляю Логические переменные в базу данных SQL. Проблема только со снятыми флажками. Я имею в виду, когда Вы проверяете некоторые флажки, это отправляет его как верный (и правильно), но когда я снял флажок с ними, это остается (верным) тем же.
Дополнение: Почему слишком мало? вот является запрос... ничем специальным здесь
string q = string.Format(@"UPDATE tblUsers SET ......., apple='{8}', orange='{9}' WHERE id='{10}'", ...., apple2, orange2, id);
lib.sql_query(q); // using my sql library...
тип данных является битом.... я попробовал также строкой..., но никаким успехом
P.S. - я также попробовал Запросом. Форма ["яблоко"] и снятие флажка работала..., но к сожалению проверка не сделала..., когда я проверяю флажок, это бросает меня ошибка:
Conversion failed when converting the varchar value 'on' to data type bit.
Кто-то?
Итак, после долгого времени комбинаций и прочего все заработало ... Без каких-либо javascripts и скрытых полей ... это код .cs
bool apple2 = (Request.Form["apple"] == "on") ? true : false;
bool orange2 = (Request.Form["orange"] == "on") ? true : false;
bool pizza2 = (Request.Form["pizza"] == "on") ? true : false;
Снятые флажки не будут отправлены при публикации формы. Вам придется написать обходной ойл.
Одним из методов было бы иметь скрытое поле, которое заполняется с помощью javascript флажка.
Во-первых, я бы привел в порядок ваш код на в начале операторы if не нужны:
if (Page.IsPostback)
{
bool appleSelected = apple.Checked;
bool pizzaSelected = pizza.Checked;
bool orangeSelected = orange.Checked;
}
Пробовали ли вы использовать класс CheckBox вместо ввода?
<asp:CheckBox id="apple" value="apple" runat="server" Checked="True|False" />
<asp:CheckBox id="pizza" value="pizza" runat="server" Checked="True|False" />
<asp:CheckBox id="orange" value="orange" runat="server" Checked="True|False" />
Он должен работать, поскольку тип данных битовый ... по крайней мере, когда вы передаете bool в хранимую процедуру.
Поскольку в вашем коде есть инструкция обновления SQL, попробуйте преобразовать bool в 0 или 1.
Int16 iApple = (apple2) ? 1 : 0;
Int16 iOrange = (orange2) ? 1 : 0;
string query = string.Format(@"UPDATE tblUsers SET ......., apple='{8}', orange='{9}' WHERE id='{10}'", ...., iApple, iOrange, id);
lib.sql_query(q);