1

この例では、ID「PostCommentsButton」のボタンが押されたときに、この ContentTemplate がトリガーされ、ID「CommentListView」の ListView ですべてが繰り返されるようにします。しかし、これはここではうまくいきませんでした。何が恋しいですか?

この例では、textfield から新しいテキストを取得し、コード ビハインドで ado.net を使用して textfield からこの新しいコンテンツを配置し、この新しいコンテンツをデータベースに保存します。問題は、UpdatePanel のボタンが押されたときに、新しい情報が他のコンテンツと共にリストに表示されないことです。ページを再起動した場合にのみ発生します。ボタンが押されたときに AJAX を使用してテキストフィールドからこの新しいコンテンツを取得するために、UpdatePanel の ListView を再度反復処理する必要があります。私は何をすべきか ?

aspx コード:

                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="PostCommentsButton" />
                    </Triggers>
                    <ContentTemplate>
                        <asp:ListView ID="CommentListView" runat="server" DataSource= '<%# Eval("Comments") %>'>
                            <ItemTemplate>
                                <div class="postComments">
                                    <span class="authorComment"><%# Eval("Author") %></span>
                                    :
                                    <span class="commentContent"><%# Eval("Message") %></span>
                                </div>
                            </ItemTemplate>
                        </asp:ListView>
                    </ContentTemplate>
                </asp:UpdatePanel>

コードビハインド:

   protected void PostsListView_ItemCommand(object sender, ListViewCommandEventArgs e)
    {

        //commandName is for recognize the clicked button
        if (e.CommandName == "postComment")
        {
            //get the comment from textbox from current listview iteration
            BlogProfileEntities blogProfile = new BlogProfileEntities();
            var commentBox = e.Item.FindControl("AddCommentTextbox") as TextBox;
            var hiddenFieldPostID = e.Item.FindControl("CurrentPostIDHiddenField") as HiddenField;
            string text = commentBox.Text;
            var postID = hiddenFieldPostID.Value;
            Comment newComment = new Comment()
            {
                Message = text,
                PostID = int.Parse(postID),
                Author = Membership.GetUser().UserName
            };

            blogProfile.Comments.Add(newComment);
            blogProfile.SaveChanges();
4

1 に答える 1

0

あなたの例にはテキストボックスが表示されません。リストビューのポストバックが発生したときに呼び出される更新パネルにテキストボックスがない場合、現在の値を取得できないと思います。commentBox 変数にブレーク ポイントを設定すると、Nothing として返されることがわかると思います。これが完全なコードでない場合は、すべてを投稿してください。

于 2013-02-26T19:29:28.057 に答える