【解決方法】投稿コメントはすべての投稿に表示されます。


Facebookのようなウォール投稿を作成しようとしていますが、ほとんど問題がありません。 投稿にコメントしたときにコメントが投稿に表示されるようにする

バックコードとフロントコードを教えています

そこで私は投稿を表示してからコメントするために2つのリストビューを使用しています。

これは私のaspxページのデザインコードです

XML
<div class="blog_Div">
    <asp:TextBox ID="TextBox1" placeholder="Write Your Comment.." class="blog"
        runat="server" TextMode="MultiLine" Rows="2"></asp:TextBox><br />


     <telerik:RadSearchBox ID="RadSearchBox1" class="TextBox2" runat="server" Width="400"
        DataSourceID="SqlDataSource1"  DataTextField="name"
            MaxResultCount="2" RenderMode="Lightweight">

            <DropDownSettings  Height="50">
           <HeaderTemplate>
                    <ul>
                        <li class="col1"></li>

                    </ul>
                </HeaderTemplate>
                <ItemTemplate>
                    <ul>
                        <li class="col1">

                            <%# DataBinder.Eval(Container.DataItem, "name") %></li>
                    </ul>
                </ItemTemplate>

            </DropDownSettings>
             </telerik:RadSearchBox>
             <br />
    <asp:Button ID="Button2"  class="Button1" runat="server" Text="Assign" onclick="Button2_Click" />
    <asp:Label ID="Label1" runat="server" Text=""></asp:Label><asp:Label ID="Label2"
        runat="server" Text=""></asp:Label>
</div><br /><br />
<div>

</div>

<div class="postview" >


     <asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1"
        ViewStateMode="Disabled"  OnItemDataBound="use"
        >
        <AlternatingItemTemplate><br>
        <div class="postback">
            <span>
            <asp:Label ID="id_Label" runat="server" Text='<%# Eval("id") %>'/>
            <span class="heding_color">Assigned to </span>
            <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'   />
            <br />
            <br />
            <span class="heding_color">Description</span><br />
            <asp:Label ID="messageLabel" runat="server" Text='<%# Eval("message") %>' />
            <br />

            <br />


            <br />


            <br />
            <span class="heding_color">Posted by : </span>
            <asp:Label ID="asigntask_nameLabel" runat="server"
                Text='<%# Eval("asigntask_name") %>'  />



            <span class="asgndate "><span class="heding_color"> Posted On </span>
            <asp:Label ID="curnt_dateLabel" runat="server"
                Text='<%# Eval("curnt_date") %>'  /></span><br />





           <asp:ListView id="rply" runat="server" DataSourceID="SqlDataSource2">
           <ItemTemplate>
           <ul>
           <li>
           <asp:Label ID="comment_Label" runat="server" Text='<%# Eval("comment") %>' />
           </li>
           </ul>
           </ItemTemplate>

           </asp:ListView>

                <div class="cust_summary replaybtn">Replay</div>

                <div id="cust_details" class="cust_details" style="display:none; ">
                <br />

                <asp:TextBox ID="TextBoxL"    placeholder="Write Your Comment.." class="commentTextArea"  runat="server" TextMode="MultiLine" Rows="2"></asp:TextBox><br /> <br />

                    <asp:Button ID="Button3" CommandName="insert" runat="server" class="btncomment" Text="Post" onclick="Button3_Click" /> </div> <br />

        </span></div>
        </AlternatingItemTemplate>


        <EditItemTemplate>
        <div class="postback">
            <span style="">
            <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>'/>
             <span class="heding_color">Assigned to </span>
              <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>'   />
            <br />
            <span class="heding_color">Description</span><br />
            <asp:TextBox ID="messageTextBox" runat="server" Text='<%# Bind("message") %>' />
            <br />
            <br />

            <br />

            <br /><br />
           <span class="heding_color"> Posted by : </span>
              <asp:TextBox ID="asigntask_nameTextBox" runat="server"
                Text='<%# Bind("asigntask_name") %>' />



            <asp:TextBox ID="curnt_dateTextBox" runat="server"
                Text='<%# Bind("curnt_date") %>' />
            <br /><br />

         <asp:ListView id="rply" runat="server" DataSourceID="SqlDataSource2">
           <ItemTemplate>
           <ul>
           <li>
           <asp:Label ID="comment_Label" runat="server" Text='<%# Eval("comment") %>' />
           </li>
           </ul>
           </ItemTemplate>

           </asp:ListView>
            <br />
                <div class="cust_summary replaybtn">Replay</div>

              <br />
                <div id="cust_details" class="cust_details" style="display:none; ">
                <br />

                <asp:TextBox ID="TextBoxL"  EnableViewState="true"   placeholder="Write Your Comment.." class="commentTextArea"  runat="server" TextMode="MultiLine" Rows="2"></asp:TextBox><br /> <br />
                    <asp:Button ID="Button3" CommandName="insert" runat="server" class="btncomment" Text="Post" onclick="Button3_Click" /> </div> <br />

            <asp:Button ID="UpdateButton" runat="server" CommandName="Update"
                Text="Update" />
            <asp:Button ID="CancelButton" runat="server" CommandName="Cancel"
                Text="Cancel" />
            <br />
            <br />
            </span></div>
        </EditItemTemplate>
        <EmptyDataTemplate>


            <span>No data was returned.</span>
        </EmptyDataTemplate>
     <InsertItemTemplate><br>
        <div class="postback">
            <span>
            <asp:Label ID="id_Label" runat="server" Text='<%# Eval("id") %>'/>
             <span class="heding_color">Assigned to </span>
             <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>'   />
            <br />
            <span class="heding_color">Description</span><br />
            <asp:TextBox ID="messageTextBox" runat="server" Text='<%# Bind("message") %>' />
            <br />
            <br />

            <br />

            <br />



            <br />
            <span class="heding_color"> Posted by : </span>
            <asp:TextBox ID="asigntask_nameTextBox" runat="server"
                Text='<%# Bind("asigntask_name") %>' />

            <asp:TextBox ID="curnt_dateTextBox" runat="server"
                Text='<%# Bind("curnt_date") %>' />
            <br /><br />

           <asp:ListView id="rply" runat="server" DataSourceID="SqlDataSource2">
           <ItemTemplate>
           <ul>
           <li>
           <asp:Label ID="comment_Label" runat="server" Text='<%# Eval("comment") %>' />
           </li>
           </ul>
           </ItemTemplate>

           </asp:ListView>
                <div class="cust_summary replaybtn">Replay</div>

                <div id="cust_details" class="cust_details" style="display:none; ">
                <br />

                <asp:TextBox ID="TextBoxL"    placeholder="Write Your Comment.." class="commentTextArea"  runat="server" TextMode="MultiLine" Rows="2"></asp:TextBox><br /> <br />
                    <asp:Button ID="Button3" CommandName="insert" runat="server" class="btncomment" Text="Post" onclick="Button3_Click" /> </div> <br />

            <asp:Button ID="InsertButton" runat="server" CommandName="Insert"
                Text="Insert" />
            <asp:Button ID="CancelButton" runat="server" CommandName="Cancel"
                Text="Clear" />
            <br />
            <br />
            </span></div>
        </InsertItemTemplate>
    <ItemTemplate><br>
    <div class="postback">
        <span>
        <asp:Label ID="id_Label" runat="server" Text='<%# Eval("id") %>'/>
        <span class="heding_color">Assigned to </span>
         <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'  />
        <br /><br />
        <span class="heding_color">Description</span><br />
        <asp:Label ID="messageLabel" runat="server" Text='<%# Eval("message") %>'   />
        <br />
        <br />

        <br />

        <br />




        <br />
        <span class="heding_color"> Posted by : </span>
        <asp:Label ID="asigntask_nameLabel" runat="server"
            Text='<%# Eval("asigntask_name") %>' />


        <span class="asgndate"><span class="heding_color"> Posted On </span>
        <asp:Label ID="curnt_dateLabel" runat="server"
            Text='<%# Eval("curnt_date") %>' /></span><br /><br />



        <asp:ListView id="rply" runat="server" DataSourceID="SqlDataSource2">
           <ItemTemplate>
           <ul>
           <li>
           <asp:Label ID="coment_Label" runat="server" Text='<%# Eval("comment") %>' />
           </li>
           </ul>
           </ItemTemplate>

           </asp:ListView>
            <div class="cust_summary replaybtn">Replay</div>

                <div id="cust_details" class="cust_details" style="display:none; "><br />

                <asp:TextBox ID="TextBoxL" Enabled="true"   placeholder="Write Your Comment.." class="commentTextArea"  runat="server" TextMode="MultiLine" Rows="2"></asp:TextBox><br />
                <br />
                    <asp:Button ID="Button3" runat="server" class="btncomment" Text="Post" onclick="Button3_Click" />
                    </div>
        <br />


        </span></div>
    </ItemTemplate>
        <LayoutTemplate>


        <br>
            <div ID="itemPlaceholderContainer" runat="server">


                <span runat="server" id="itemPlaceholder" />
            </div>
            <div style="">
            </div>
        </LayoutTemplate>
        <SelectedItemTemplate>
        <div class="postback">
            <span >
            <asp:Label ID="id_Label" runat="server" Text='<%# Eval("id") %>'/>
            <span class="heding_color">Assigned to </span>
              <asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'   />
            <br />
            <span class="heding_color">Description</span><br />
            <asp:Label ID="messageLabel" runat="server" Text='<%# Eval("message") %>' />
            <br />
            <br />


            <br />

                   <span class="heding_color"> Posted by : </span>

            <asp:Label ID="asigntask_nameLabel" runat="server"
                Text='<%# Eval("asigntask_name") %>' />
            <span class="asgndate"><span class="heding_color">Posted On </span>
            <asp:Label ID="curnt_dateLabel" runat="server"
                Text='<%# Eval("curnt_date") %>' /></span><br /><br />


             <asp:ListView id="rply" runat="server" DataSourceID="SqlDataSource2">
           <ItemTemplate>
           <ul>
           <li>
           <asp:Label ID="comment_Label" runat="server" Text='<%# Eval("comment") %>' />
           </li>
           </ul>
           </ItemTemplate>

           </asp:ListView>

                <div class="cust_summary replaybtn">Replay</div>

                <div id="cust_details" class="cust_details" style="display:none; "><br />

                <asp:TextBox ID="TextBoxL" placeholder="Write Your Comment.." class="commentTextArea"  runat="server" TextMode="MultiLine" Rows="2"></asp:TextBox><br />
                <br />
                    <asp:Button ID="Button3" class="btncomment" runat="server" Text="Post" onclick="Button3_Click" />
                    </div>
            <br />
           <br />

            </span></div>
        </SelectedItemTemplate>


    </asp:ListView>


       <asp:SqlDataSource ID="SqlDataSource1" runat="server"
        ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
        SelectCommand="SELECT [message], [name], [curnt_date], [asigntask_name],[id] FROM [task] ORDER BY [id] DESC">


    </asp:SqlDataSource>
    <asp:SqlDataSource ID="SqlDataSource2" runat="server"
        ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"


        SelectCommand="select task.id ,rply.name,rply.comment,rply.rpl_date from task join rply on task.id=rply.id where task.id=rply.id  ORDER BY task.id DESC
">
    </asp:SqlDataSource>

C#
string s2 = System.Web.HttpContext.Current.User.Identity.Name;

protected void Page_Load(object sender, EventArgs e)
{
   // string s2 = System.Web.HttpContext.Current.User.Identity.Name;

    Session["name"] = s2;

}

protected void Button2_Click(object sender, EventArgs e)
{
    try
    {
    string s2 = System.Web.HttpContext.Current.User.Identity.Name;

    SqlConnection a = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);



   SqlCommand cmd = new SqlCommand("insert into task(message,name,curnt_date,asigntask_name) values('" + TextBox1.Text + "','" + RadSearchBox1.Text + "','" + DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") + "','" + s2 + "') ", a);

     a.Open();


       cmd.ExecuteNonQuery();
       a.Close();
       TextBox1.Text = "";
       RadSearchBox1.Text = "";

       this.Response.Redirect("TaskManager.aspx?user="+s2);
   }
    catch (System.Data.SqlClient.SqlException ex)
   {
       Label1.Text = ex.Message.ToString();

   }


}
protected void use(object sender, ListViewItemEventArgs e)
{
    Label id = (Label)e.Item.FindControl("id_Label");
    ViewState["id"] = id.Text;

}


protected void Button3_Click(object sender, EventArgs e)
{
    SqlConnection c = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);



    int d = int.Parse((String)ViewState["id"]);
    var btn = (Button)sender;
   // if (btn.Text == "btnComent")
    //{

        var item = (ListViewItem)btn.NamingContainer;
        // find other controls:
        var btnModify = (TextBox)item.FindControl("TextBoxL");

        try
        {

            string s2 = System.Web.HttpContext.Current.User.Identity.Name;

            SqlCommand cmd = new SqlCommand("insert into rply(id,comment,name,rpl_date)values('"+d+"','" + btnModify.Text + "','" + s2 + "','" + DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") + "')", c);
            c.Open();
            cmd.ExecuteNonQuery();
            c.Close();
            btnModify.Text = "";
            Response.Redirect("TaskManager.aspx");

            /*
                     SqlConnection c = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);

                          SqlCommand cmd = new SqlCommand();


                          cmd.Connection = c; //assigning connection to command
                          cmd.CommandType = CommandType.Text; //representing type of command

                          cmd.CommandText ="update task set post=@post  where id=@id";


                          cmd.Parameters.AddWithValue("@post", btnModify.Text);
                          cmd.Parameters.AddWithValue("@id", d);
                          c.Open();
                          cmd.ExecuteNonQuery();
                          c.Close();
                          btnModify.Text = "";*/

        }
        catch (System.Data.SqlClient.SqlException ex)
        {
            Label1.Text = ex.Message.ToString();
        }



    }
}

この問題から抜け出すために協力してください

解決策 1

1. onitemdatabound を使用して ViewState に ID を設定します。 OnItemDataBound はレコードごとに起動されます。 したがって、ViewState には常にリスト内の最後のタスクの ID が含まれます。
2. 挿入クエリから、タスクの ID としてデータベース内の ID 列を使用しているようです。 実際にデータベースに入力されているかどうかを確認できますか?
3. 正しく入力されていないか、すべてのタスクが同じ ID を取得した場合、すべての応答も同じ ID を取得し、結合によりすべてのタスクのすべての応答が返されるためです。

したがって、まずデータベース内のデータが実際に正しいかどうかを確認します (すべてのタスクには一意の ID があり、すべての返信には実際に正しいタスク ID が一緒に保存されています)。 上記の観察に基づくと、PK フィールドと FK フィールドが正しく入力されていないと強く感じます。

更新: 選択クエリで応答を確認してください。

SQL
select task.id ,rply.name,rply.comment,rply.rpl_date from task join rply on task.id=rply.id where task.id=rply.id  ORDER BY task.id DESC

このクエリは結果をどのように制限するのでしょうか。 すべてのタスクに対してすべての返信が得られます。

sqldatasource2 を外側のリストビューの itemtemplate 内に移動すると、id_Label を指す制御パラメーターを使用して、1 つのタスクへの応答をフィルターできます。

コメント

タイトルとURLをコピーしました