.net CheckBoxList在回发后丢失所选属性

时间:2016-06-23 20:25:20

标签: c# asp.net checkboxlist

我有一个嵌套在Repeater中的CheckBoxList,它在Repeater的OnItemDataBound中动态填充。在按钮上单击我想将更改保存到每个复选框列表,但在回发后所选属性始终为TRUE。

HTML:

<asp:Repeater id="rptFields" runat="server" OnItemDataBound="rptField_OnItemDataBound">
  <ItemTemplate>
    <asp:HiddenField id="hFieldID" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"ID")%>' />
    <asp:Label id="lblDesc" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Description")%>' />
    <asp:CheckBoxList id="chkOptions" runat="server" ></asp:CheckBoxList>
  </ItemTemplate>
</asp:Repeater>
<asp:Button id="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />

代码背后:

protected void Page_Load(object sender, EventArgs e)
{
  if(!Page.IsPostBack)
  {
    rptFields.DataSource = Fields;
    rptFields.DataBind();
  }
}

protected void rptField_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item)
            || (e.Item.ItemType == ListItemType.AlternatingItem)
  {
    CheckBoxList chkOptions = (CheckBoxList)e.Items.FindControl("chkOptions");
    Field ThisField = (Field)e.Item.DataItem;

    for (int i = 0; i < ThisField.Options.Length; i++)
    {                   
        ListItem liOption = new ListItem (ThisField.Options [i].Description, ThisField.Options [i].ID.ToString ());

        liOption.Selected = ThisField.Options [i].Selected;

        chkOptions.Items.Add (liOption);
    }
  }
}

protected void btnSave_Click(object sender, EventArgs e)
{
  foreach (RepeaterItem rptItem in rptFields)
  {
    int iFieldID = int.parse(rptItem.FindControl("hFieldID"));
    Field ThisField = GetFieldByID(iFieldID);
    CheckBoxList chkOptions = (CheckBoxList)rptItem.FindControl("chkOptions");

    foreach(Option ThisOption in ThisField.Options)
    {
      for(int i = 0;i < chkOptions.Items.Count; i++)
      {
        int OptionID = int.parse(chkOptions.Items[i].Value);
        if(ThisOption.ID == OptionID)
        {
          //HERE IS THE PROBLEM
          //SELECTED IS ALWAYS TRUE
          ThisOption.Selected = chkOptions.Items[i].Selected;
          ThisOption.Save();
        }
      }
    }
  }
}

转发器中的所有数据都会持续存在,包括复选框列表项的文本和值字段。除所选房产外的所有房产。

我搜索并搜索了答案,但没有答案。每个类似的问题都是人们在每个回发中重新绑定列表。正如你所看到的那样,并非如此。而对于它的价值,完全相同的解决方案适用于单选按钮列表没有问题。

编辑:为了记录这个项目正在运行Mono.net 4.5

更新:同样的解决方案适用于我们使用.Net 2.0构建的另一个项目。我不确定它是否是单声道问题,或者是否有配置设置可以改变帖子的行为。

1 个答案:

答案 0 :(得分:0)

我最近遇到了类似的问题,要解决它你可以将它存储在querystring中。