如何在页面生命周期中存储复选框列表复选框的状态?
这里我有一个未绑定的复选框列表控件,其中值来自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
结束子“
答案 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)