Флажок не останется непроверенным или наоборот

#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