0

(Asp.net 4) 私はリピーターを使用してすべてのブログ記事と各ブログへのコメントを表示するブログを持っています。ユーザーがブログにコメントを投稿できる方法を変更しようとしています。UpdatePanel の各ブログの下にコメントを入れたいのですが、コメントを書いて保存ボタンをクリックすると、コメントを更新して、新しいコメントが表示されるようにしたいと考えています。しかし、私はこれを達成するのに苦労しています。Repeater の ItemTemplate に UpdatePanel を追加し、コメントを保存するための Textboxes と Button を追加しました。各 UpdatePanel は、ブログの ID を持つ に配置されます。しかし、正しいブログ ID のコメントを保存し、その UpdatePanel を更新するためのコードを作成する方法がわかりません。

コード:

<asp:Repeater ID="RepeaterBlog" runat="server">
            <ItemTemplate>        
                <article>  
                    <% if (repeaterCounter == 0)
                       {
                           Response.Write("<header class=\"firstArticleInBlog\">");
                       }
                       else
                       {
                           Response.Write("<header class=\"normalArticle\">");
                       }
                    %>  
                    <h2><%# Eval("article_header") %>  &nbsp;<span class="date">
                    <time datetime="<%# GetPubDate(Eval("article_date")) %>"><%# FormatDate(Eval("article_date")) %></time></span></h2></header>

                    <p><%# Eval("article_content") %><p><br />
                    <div class="comments">                
                    <div class="showhidecomments">
                        <!--<a class="iframe-comments" data-fancybox-type="iframe" href='WriteComments.aspx?BlogId=<%# DataBinder.Eval(Container, "DataItem.id") %>'>Skriv kommentar</a> | -->
                        <a href="javascript:void(0);" title="i<%# Eval("id") %>">Vis/Skriv kommentarer (<%# CountComments (DataBinder.Eval(Container, "DataItem.id")) %>)</a> | <a href="javascript:void(0);" title="i<%# Eval("id") %>" >Skjul kommentarer</a>
                    </div>
                    <section>
                    <article>
                    <div id="i<%# Eval("id") %>" style="display: none;">
                        <asp:UpdatePanel ID="upPanel" runat="server">
                            <Triggers>
                                <asp:AsyncPostBackTrigger ControlID="cmdSaveComment" EventName="Click" />
                            </Triggers>
                            <ContentTemplate>
                                <%# GetComments (DataBinder.Eval(Container, "DataItem.id")) %>
                                <asp:TextBox ID="txtName" runat="server" />
                                <asp:TextBox ID="txtComment" runat="server" TextMode="MultiLine" />
                                <asp:Button ID="cmdSaveComment" runat="server" OnClick="cmdSaveComment_Click" />
                            </ContentTemplate>    
                        </asp:UpdatePanel>
                        </div>                   
                    </article>
                    </section>
                    </div>
                    <% repeaterCounter++; %>
                </article>
            </ItemTemplate>            
            </asp:Repeater>

コード ビハインドでは次のようになります。

protected void cmdSaveComment_Click(object sender, EventArgs e)
        {
            //simplified code:
            string name = txtName.Text;
            string comment = txtComment.Text;
            int blogId = (int)(Eval("DataItem.id"));

            dataHandler.NewComment(name, comment, blogId);            
        }

私は少なくともここで何かに近づいていますか、それとも完全に間違った方向に進んでいますか?

4

1 に答える 1

2

リピーターには ItemCommand プロパティを使用し、ボタンには CommandName プロパティを使用する必要があります。

まず、リピーターのイベント名とボタンのコマンド名を aspx で宣言します。CommandName がボタンの OnClick を置き換えることに注意してください。また、ボタンにコマンド引数を与えます。これは、コメントの対象となる記事レコードの ID です。

<asp:Repeater ID="RepeaterBlog" runat="server" OnItemCommand="RepeaterBlog_ItemCommand">

<asp:Button ID="cmdSaveComment" runat="server" CommandName="SaveComment" CommandArgument='<%# Eval("id")%>' />

これをコードビハインドに追加します

void RepeaterBlog_ItemCommand(Object Sender, RepeaterCommandEventArgs e) {        
  if(e.CommandName == "SaveComment") {
    string name = ((TextBox)e.Item.FindControl("txtName")).Text;
    string comment = ((TextBox)e.Item.FindControl("txtComment")).Text;
    dataHandler.NewComment(name, comment, e.CommandArgument);
  }
}    

これで始められるはずです

于 2013-04-21T09:28:36.617 に答える