存储我的复选框列表的状态

时间:2009-09-08 17:28:23

标签: asp.net vb.net viewstate

如何在页面生命周期中存储复选框列表复选框的状态?

这里我有一个未绑定的复选框列表控件,其中值来自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

结束子“

4 个答案:

答案 0 :(得分:0)

我的第一个猜测是,你没有看到你的代码,就是你在Page_Load上绑定了checkboxlist而没有检查页面加载是否是回发。这样做,它应该解决问题。

答案 1 :(得分:0)

您需要检查将数据绑定到核对表框的位置。问题不在于您发布的代码中,而是绑定代码的位置。确保检查IsPostBack是否为假,否则每次加载页面时,您将重新绑定数据并丢失所有状态。你应该只绑定一次。例如(在C#中):

if (!IsPostBack)
{
   BindMyDataToCheckBoxList();
}

在你绑定数据的位置设置一个断点,每当你做任何事情,比如点击一个按钮或其他任何东西时,我都会打赌,绑定代码会被点击,它可能不应该被点击。

答案 2 :(得分:0)

如果他们再次访问该页面,则无法保证保留这些值,但如果他们使用后退按钮则不会。您可以尝试设置页眉,以便不会缓存页面,以防止用户看到无效数据。

在页面生命周期的Page_Init阶段,您可以使用XML文件中的值填充复选框列表,然后在Page_Load阶段检查页面是否未被回发并相应地选中相应的复选框。会议中的价值观。

EG。在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;
}

此代码尚未经过测试,但可以作为起点使用。您可以使用代码转换器such as the one from Telerik将代码转换为VB.NET。

答案 3 :(得分:0)

您可以通过以下方式保留页面上/页面上的复选框状态:

  • Cookie
  • 会话
  • 视图状态
  • 或保存 数据库中。

我会推荐使用Sessions,因为它使用非常简单,并且不要求他们启用Cookie。

可以找到关于会话的简单教程here。这是一个c#版本。

Here是一个vb.net示例(但不是来自MSDN)