0

プロジェクトデータベース用の非常にシンプルな「タグクラウド」関数を作成しています。ユーザーがさまざまなタグをチェックできるようにしてから、チェックボックスをオンにした自動ポストバックを使用して、それらのタグを持つ関連プロジェクトを表示できるようにします。

動作しますが、チェックボックスはポストバック後にリセットされます。ユーザーが複数のタグを選択できるように、チェックボックスをオンのままにしておきます(場合によってはオフにします)。

私は検索して、データバインディングイベントを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>

そしてcs..。

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();

                    }

                }
            }

    }

何か案は?

4

0 に答える 0