在这个示例中,我希望当按下ID为“PostCommentsButton”的按钮时,将触发此ContentTemplate并在ListView中再次使用ID“CommentListView”进行迭代。但这在这里不起作用。我错过了什么?
在这个例子中,我从textfield中获取新文本,在后面的代码中,我使用ado.net将这个新内容放在textfield中,并将这些新内容保存在数据库中。问题是当按下UpdatePanel中的按钮时,新信息不会与其他内容一起出现在列表中。它只有在我重新启动页面时才会出现。我希望UpdatePanel中的ListView再次迭代,以便在按下按钮时使用AJAX从文本字段中获取此新内容。我该怎么办?
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();
答案 0 :(得分:0)
我在示例中看不到文本框。如果文本框不在更新面板中,当列表视图回发时会被调用,我不认为您将获得当前值。我怀疑如果你在commentBox变量上放置一个断点,你会发现它回来时没什么。如果这不是您的完整代码,请发布所有内容。