#html #asp.net #vb.net #checkbox
#HTML #asp.net #vb.net #флажок
Вопрос:
Я просмотрел много разных решений, но почти все они не то, что я пытаюсь сделать.
У меня есть страница aspx, на которой есть 5 флажков. Я извлекаю данные из базы данных SQL и устанавливаю начальное состояние включения / выключения флажка на основе полученного значения. Это работает нормально.
Проблема начинается, когда я пытаюсь установить или снять флажок. Если флажок установлен, он будет снят на долю секунды, а затем проверка вернется или наоборот (флажок снят до состояния checked).
Вот флажки:
<asp:CheckBox ID="ckbIVPO" runat="server" Text=" Invoice Value amp; P.O.#" OnCheckedChanged="ckbIVPO_CheckedChanged" AutoPostBack="true" />
<asp:CheckBox ID="ckbQuNotes" runat="server" Text=" Quality Notes" OnCheckedChanged="ckbQuNotes_CheckedChanged" AutoPostBack="true" />
<asp:CheckBox ID="ckbShipTerms" runat="server" Text=" Ship To amp; Shipping Terms" OnCheckedChanged="ckbShipTerms_CheckedChanged" AutoPostBack="true" />
<asp:CheckBox ID="ckbMatSurFin" runat="server" Text=" Material/Surface/Finish" OnCheckedChanged="ckbMatSurFin_CheckedChanged" AutoPostBack="true" />
<asp:CheckBox ID="ckbFabFasExt" runat="server" Text=" Fabrication amp; Fastner Extras" OnCheckedChanged="ckbFabFasExt_CheckedChanged" AutoPostBack="true" />
Событие OnCheckedChange для каждого из них в основном одно и то же (изменяется только имя идентификатора элемента управления):
If [control ID].Checked = checked Then
[control ID].Checked = False
Else
[Control ID].checked = True
End IF
Я также нашел здесь статью о SO, в которой говорилось об использовании скрытых текстовых полей и установке флажка на основе его значения. Но, похоже, я не могу заставить это работать. Я думаю, что мне чего-то не хватает.
Вот этот код:
If txbivpo.Text = "1" Then
ckbIVPO.Checked = True
Else
ckbIVPO.Checked = False
End If
If txbshtrm.Text = "1" Then
ckbShipTerms.Checked = True
Else
ckbShipTerms.Checked = False
End If
If txbqunotes.Text = "1" Then
ckbQuNotes.Checked = True
Else
ckbQuNotes.Checked = False
End If
If txbmatsurfin.Text = "1" Then
ckbMatSurFin.Checked = True
Else
ckbMatSurFin.Checked = False
End If
If txbfabfasext.Text = "1" Then
ckbFabFasExt.Checked = True
Else
ckbFabFasExt.Checked = False
End If
Кажется, я просто не могу заставить это работать. Я уверен, что мне чего-то не хватает, но я не уверен, что это такое. Я также не уверен, как это сделать таким образом. Я использую VB, потому что я не очень хорошо разбираюсь в C #. (На самом деле я просто отстой в C #!) Я использую скрытые текстовые поля для извлечения данных для запроса обновления, если пользователь что-то меняет, и мне нужно обновить SQL.
Кто-нибудь может мне помочь или указать на наглядный пример того, как просто изменить состояние флажка и остаться, а затем иметь возможность обновлять скрытое текстовое поле, чтобы запрос обновлялся правильно?
Ответ №1:
Это предположение, поскольку код для установки правильного текстового поля из базы данных не показан. Но я думаю, вам нужно обернуть этот фрагмент кода в проверку IsPostBack:
If Not IsPostBack Then
setCheckBoxValuesFromDB
End If
Что, вероятно, происходит, так это то, что при нажатии на флажок выполняется обратная отправка. В этой обратной передаче, предположительно в Page_load , значения по умолчанию извлекаются из базы данных и перезаписывают те, на которые нажал пользователь.
Ответ №2:
Флажок изначально снимается, потому что это делается на стороне браузера. После завершения обратной отправки страница снова отображается.
Если вы не изменили данные в БД, то вы получите состояние из отображаемой БД.
Предположительно, у вас есть метод для инициализации флажков, давайте вызовем его InitCheckboxes
, и вы вызываете его в методе Page_Load . Все, что вам нужно сделать, это не вызывать этот метод при обратной передаче, например:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not (Page.IsPostBack) Then
InitCheckboxes()
End If
End Sub