C# 回发后如何在DataList中保持复选框选中状态?

C# 回发后如何在DataList中保持复选框选中状态?,c#,asp.net,checkbox,datalist,autopostback,C#,Asp.net,Checkbox,Datalist,Autopostback,我正在为项目数据库创建一个非常简单的“标记云”函数。我希望用户能够检查各种标记,然后在复选框上显示自动回写,显示具有这些标记的关联项目 它可以工作,但回发后复选框会重置。我希望复选框保持选中状态(或不选中,视情况而定),以便用户可以选择多个标记 我搜索并看到有人说要将数据绑定事件放在if(!isPostBack)中。我试过了,但似乎没关系 aspx代码: <asp:DataList ID="TagDataList" runat="server" OnDataBinding="databin

我正在为项目数据库创建一个非常简单的“标记云”函数。我希望用户能够检查各种标记,然后在复选框上显示自动回写,显示具有这些标记的关联项目

它可以工作,但回发后复选框会重置。我希望复选框保持选中状态(或不选中,视情况而定),以便用户可以选择多个标记

我搜索并看到有人说要将数据绑定事件放在if(!isPostBack)中。我试过了,但似乎没关系

aspx代码:

<asp:DataList ID="TagDataList" runat="server" OnDataBinding="databindthesucker" DataKeyField="TagName">
                <ItemTemplate>
                    <asp:CheckBox AutoPostBack="true" ID="TagCheckbox" runat="server" Text='<%#Eval ("dZTagName") %>' />
                    <asp:HiddenField ID="TagNameHidden" runat="server" Value='<%#Eval ("dZTagName") %>'/><br />
                </ItemTemplate>
                </asp:DataList>

<asp:DataList ID="ProjectDataList" runat="server" DataKeyField="projectID">
                <ItemTemplate>
                    <asp:HyperLink ID="ProjectLink" runat="server" NavigateUrl='<%# "/Project/Default.aspx?PID=" + Eval ("projectID") %>' Text='<%# Eval ("projectID") + ": " + Eval ("projectName") %>'> </asp:HyperLink><br />

                </ItemTemplate>
                </asp:DataList>

有什么想法吗?

如果将所有与if(!IsPostBack)中的显示标签和数据源有关的内容都放在页面加载中,会发生什么情况?只是因为你说“它可以工作,但是回发后复选框会重置”而让人困惑。但是如果“它有效”,那就意味着该复选框在回发时具有正确的值。对不起,我会澄清。当我说“it works”时,我的意思是,当我选中一个框时,它会进行回发,我会得到一个和该标记相关的项目列表。但是我希望该选项选中更多的框,这样我就可以选择多个标记。我希望它每次回发,并记住选中的框,这样我就可以用更多的标签进一步过滤我的搜索。(希望这一切都有意义)我想我明白了。但是为什么不选择所有你想要检查的框,然后进行一次回发呢?我可能会这样做,但我喜欢“动态过滤”的想法。。。使用每个选择筛选列表。看来我应该能做到!但是如果没有,我只会添加一个提交,就这样吧。动态过滤很好,但是如果你想选择多个过滤器,那么只有一个回发会更容易、更高效。在回发时,只需确保没有重新绑定并启用viewstate即可。但是,既然您在回发时说复选框值是正确的,那么当页面加载时,应该按照预期检查复选框值。确保在页面呈现之前不会清除复选框值。
protected void Page_Load(object sender, EventArgs e)
    {

        displaytags(sender, e);
     }

    protected void displaytags(object sender, EventArgs e)
    {
        var qrygettags = (from t in db.TagTables
                         select new { t.TagName }).Distinct().ToList();

        TagDataList.DataSource = qrygettags;
        TagDataList.DataBind();
        CheckBox TagCheckbox = (CheckBox)TagDataList.Items[0].FindControl("TagCheckbox");

    }




    protected void databindthesucker(object sender, EventArgs e)
    {
            foreach (DataListItem item in TagDataList.Items)
            {
                if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                {
                    CheckBox TagCheckbox = (CheckBox)item.FindControl("TagCheckbox");
                    HiddenField TagNameHidden = (HiddenField)item.FindControl("TagNameHidden");
                    string Tagstring = TagNameHidden.Value.ToString();

                    if (TagCheckbox.Checked)
                    {
                        var qrygetprojects = (from p in db.projects
                                              join pt in db.TagTables on p.projectID equals pt.projectID
                                              where pt.TagName == Tagstring
                                              select new
                                              {
                                                  pt.projectID,
                                                  p.projectName
                                              }).ToList();

                        ProjectDataList.DataSource = qrygetprojects;
                        ProjectDataList.DataBind();

                    }

                }
            }

    }