【问题标题】:Store state of my checkbox list存储我的复选框列表的状态
【发布时间】:2009-09-08 17:28:22
【问题描述】:

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

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

结束子”

【问题讨论】:

    标签: asp.net vb.net viewstate


    【解决方案1】:

    在没有看到您的代码的情况下,我的第一个猜测是您在 Page_Load 上绑定了复选框列表,而没有检查页面加载是否是回发。这样做,它应该可以解决问题。

    【讨论】:

    • 我是新手,请帮忙
    • 如果您的页面加载中没有代码,那么复选框如何获取其项目?
    【解决方案2】:

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

    if (!IsPostBack)
    {
       BindMyDataToCheckBoxList();
    }
    

    在绑定数据的位置设置一个断点,我敢打赌,每次您执行诸如单击按钮之类的任何操作时,绑定代码都会被命中,而这可能不应该被命中。

    【讨论】:

      【解决方案3】:

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

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

      例如。在 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,such as the one from Telerik

      【讨论】:

        【解决方案4】:

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

        • 饼干
        • 会话
        • 视图状态
        • 或保存在 数据库。

        我会推荐 Sessions,因为它使用起来非常简单,并且不需要启用 cookie。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-18
          相关资源
          最近更新 更多