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