Сохранить состояние моего списка флажков

Как сохранить состояние моих флажков в списке флажков в течение жизненного цикла страницы?

Здесь у меня есть несвязанный элемент управления списком флажков, где значения поступают из файла xml.

как сохранить состояние?

Более того, когда я нажимаю кнопку «Далее» на новую страницу, состояние возврата сохраняется.

Но когда я нажимаю кнопку «Назад» и перехожу на ту же страницу, состояние не сохраняется

Protected Sub chkBx_SR_wu_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles chkBx_SR_wu.SelectedIndexChanged
Dim i As Integer
i = 0
Try
    For i = 0 To chkBx_SR_wu.Items.Count - 1
        If chkBx_SR_wu.Items(i).Selected Then
            Select Case chkBx_SR_wu.Items(i).Value
                Case "SR_MR"
                    chkbx_SR.Checked = True
                Case "Sk_MR"
                    chkbx_SkRoom.Checked = True
                Case "SC_SS"
                    chkbx_admin.Checked = True
                Case "CS_MR"
                    chkbx_salesFloor.Checked = True
                Case "TEAM_LEADER"
                    rb_tl.Enabled = True
                    chkbx_tlAdmin.Enabled = True
                    chkbx_tlJewellery.Enabled = True
                    chkbx_tlSalesFloor.Enabled = True
                    chkbx_tlSkRoom.Enabled = True
                    rb_tl.Items(0).Enabled = True
                    rb_tl.Items(1).Enabled = True
                    rb_tl.Items(2).Enabled = True
                    rb_tl.Items(3).Enabled = True
                    ReqiredFieldValidator1.Enabled = True



            End Select
        Else
            Select Case chkBx_SR_wu.Items(i).Value
                Case "SR_MR"
                    chkbx_SR.Enabled = False
                    chkbx_SR.Checked = False
                Case "Sk_MR"
                    chkbx_SkRoom.Enabled = False
                    chkbx_SkRoom.Checked = False
                Case "SC_SS"
                    chkbx_admin.Enabled = False
                    chkbx_admin.Checked = False
                Case "CS_MR"
                    chkbx_salesFloor.Enabled = False
                    chkbx_salesFloor.Checked = False
                Case "TEAM_LEADER"
                    chkbx_tlAdmin.Enabled = False
                    chkbx_tlAdmin.Checked = False
                    chkbx_tlJewellery.Enabled = False
                    chkbx_tlJewellery.Checked = False
                    chkbx_tlSalesFloor.Enabled = False
                    chkbx_tlSalesFloor.Checked = False
                    chkbx_tlSkRoom.Enabled = False
                    chkbx_tlSkRoom.Checked = False
                    rb_tl.Items(0).Enabled = False
                    rb_tl.Items(1).Enabled = False
                    rb_tl.Items(2).Enabled = False
                    rb_tl.Items(3).Enabled = False
                    ReqiredFieldValidator1.Enabled = False
            End Select
        End If
    Next

Catch ex As Exception

End Try

Конец суб"


person Community    schedule 08.09.2009    source источник


Ответы (4)


Мое первое предположение, не видя вашего кода, заключается в том, что вы привязываете список флажков к Page_Load, не проверяя, является ли загрузка страницы обратной передачей. Сделайте это, и это должно решить проблему.

person jcollum    schedule 08.09.2009
comment
я тут новичок помогите пожалуйста - person ; 08.09.2009
comment
если на вашей странице нет кода, то как флажок получает свои элементы? - person jcollum; 08.09.2009

Вам нужно проверить, где вы привязываете данные к контрольному списку. Проблема не в коде, который вы разместили, а в том, где вы когда-либо связывали код. Убедитесь, что вы проверяете IsPostBack на false, иначе каждый раз, когда ваша страница загружается, вы будете перепривязывать свои данные и терять все свое состояние. Вы должны связать только один раз. Например (в С#):

if (!IsPostBack)
{
   BindMyDataToCheckBoxList();
}

Поставьте точку останова в том месте, где вы привязываете данные, я уверен, что каждый раз, когда вы делаете что-то вроде нажатия кнопки или чего-то еще, этот код привязки получает удар, которого, вероятно, не должно быть.

person Kelsey    schedule 08.09.2009

Не существует гарантированного метода сохранения значений, если они снова посетят страницу, но не при использовании кнопки «Назад». Вы можете попробовать настроить заголовки страниц так, чтобы страница не кэшировалась в качестве меры предосторожности, чтобы пользователь не увидел неверные данные.

На этапе Page_Init жизненного цикла страницы вы можете заполнить свой список флажков значениями из вашего XML-файла, а затем на этапе Page_Load проверить, не отправлена ​​ли страница обратно, и соответственно установить флажки, используя значения в файле XML. сессия.

Eg. in C# -

protected void Page_Init(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // Populate checkbox list from XML
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        List<string> list = Session["MyList"] as List<string>;

        if (list != null)
        {
            foreach (int val in list)
            {
                ListItem chk = myCheckBoxList.Item.FindByValue(val);

                if (chk != null)
                    chk.Checked = true;
            }
        }
    }
}

protected void SaveButton_Click(object sender, EventArgs e)
{
    List<string> list = new List<string>();

    foreach (ListItem li in myCheckBoxList.Items)
    {
        if (li.Checked)
        {
            list.Add(li.Value);
        }
    }

    Session["MyList"] = list;
}

Этот код не тестировался, но его можно использовать в качестве отправной точки. Вы можете преобразовать код в VB.NET с помощью конвертера кода, например, от Telerik.

person Mun    schedule 08.09.2009

Вы можете сохранить состояние флажков на/на страницах одним из следующих способов:

  • Куки
  • Сессии
  • ViewState
  • или сохранить его в базе данных.

Я бы порекомендовал сеансы, поскольку они довольно просты в использовании и не требуют включения файлов cookie.

Простое руководство по сеансам можно найти здесь . Это версия С#.

Здесь приведен пример vb.net (но не из MSDN )

person waqasahmed    schedule 08.09.2009