最近在做一个类似微博的社交网站,其中用户分享的信息我是用repeater来循环显示出来的,然后信息的评论我就是嵌套多了一个repeater不过在用到updatepanel控件来实现局部更新的时候发现没什么效果,不知道该怎么用,求大神帮忙!!
下面给出部分代码。我想要的效果是当点击评论按钮后,第二个repeater会重新绑定数据,然后局部更新,把刚刚用户回复的内容显示出来现在目前的状况是能回复,也能把用户回复的内容插入数据库,但是就是没有局部更新用户刚刚添加的评论   <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>         <asp:UpdatePanel ID="UpdatePanelGridDetail" runat="server">
            <ContentTemplate>
    <div id="container">
        
        <div id="main">
            
            <div id="eventReply">
                
                <div id="rightMain">
                    
                   <div id="publish">
                   <br />
                        <img src="Images/3.png" alt="" width="250px" height="23px" class="imge"/>
                        <asp:Repeater ID="rep" runat="server" OnItemDataBound="comrep_DataBound">
                            <ItemTemplate>                           
                                <div class="publishBlock">                             
                                    <div class="message">
                                        <img src='<%#Eval("Userimg")%>' alt="用户头像" width="60" height="60" /></div>
                                    <div class="total">
                                        <div class="content">
                                            <asp:LinkButton ID="Realname1" runat="server" Style="text-decoration: none;"><%#Eval("Realname") %>: </asp:LinkButton>
                                            <%#Getshare((Eval("ShareId")).ToString()) %></div>
                                        <asp:Panel ID="Panelreply" runat="server" Visible="false">
                                        <div class="comment">
                                        <div class="combtn">
                                          <asp:TextBox ID="comment" runat="server" TextMode="MultiLine" Height="30" Width="400px"
                                                CssClass="text"></asp:TextBox>
                                            <asp:Button CommandArgument="<%#Container.ItemIndex %>" ID="reply" runat="server"
                                                Text="评论" OnClick="reply_Click" Width="45px" Height="25px" CssClass="button" /></div> 
                                       <asp:Repeater ID="commentrep" runat="server">
                                           <ItemTemplate> 
                                             <div class="comm">
                                                    <div class="littlephoto">
                                                        <img src='<%#Eval("UserImg") %>' width="30" height="30" alt="" /></div>
                                                    <div class="arguement">
                                                        <asp:LinkButton ID="Realname2" runat="server" Style="text-decoration: none"><%#Eval("Realname") %>:</asp:LinkButton>
                                                        <%#Eval("Comments") %>(<%#Eval("CreateDate") %>)</div>
                                                </div>
                                            </ItemTemplate>
                                        </asp:Repeater>
                                        </div>
                                        </asp:Panel>
                                        </div>
                                    </div>                         
                            </ItemTemplate>
                        </asp:Repeater>
                        </div>
                </div>  
            </div>
        </div>
    </div> </ContentTemplate>
        </asp:UpdatePanel>
    </form>
protected void Page_Load(object sender, EventArgs e)
        {
            string Account = Session["Account"].ToString();
            ModelFriends mfds = new ModelFriends(Account);//绑定新鲜事的repeator
            DataTable dt = new DataTable();
            dt = new SharesDAO().SelectShare(mfds);
            rep.DataSource = dt;//第一个reapeator绑定
            rep.DataBind();
        }        protected void comrep_DataBound(object sender, RepeaterItemEventArgs e)//评论的那个repeater数据源绑定
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                Repeater rep = e.Item.FindControl("commentrep") as Repeater;//找到里层的repeater对象
                DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项 
                string shareid = Convert.ToString(rowv["ShareId"]); //获取填充子类的id 
                rep.DataSource = new CommentsDAO().Selectcomment(new ModelShares(shareid));
                rep.DataBind();            }
        }        protected void reply_Click(object sender, EventArgs e)//回复按钮
        {
            int com = Convert.ToInt32((sender as Button).CommandArgument);
            string reply = (rep.Items[com].FindControl("comment") as TextBox).Text;
            string userid = Session["UserId"].ToString();
            string account = Session["Account"].ToString();
            string createdate = DateTime.Now.ToString();            DataTable dt = Session["Shares"] as DataTable;
            int x = Convert.ToInt32(ddlpage1.SelectedIndex);
            int y = x * 10 + com;
            string shareid = dt.Rows[y][0].ToString();            ModelComments mcom = new ModelComments(shareid, userid, reply, createdate);
            new CommentsDAO().Insertnewscom(mcom);
            (rep.Items[com].FindControl("comment") as TextBox).Text = "";
            Server.Transfer("main.aspx?indexs=" + x + "");        }

解决方案 »

  1.   

    <Triggers>
                <asp:AsyncPostBackTrigger ControlID="reply" EventName="Click" />
     </Triggers>
      

  2.   

    <asp:UpdatePanel ID="UpdatePanelGridDetail" runat="server">
                <ContentTemplate>
    <asp:Repeater ID="rep" runat="server" OnItemDataBound="comrep_DataBound">
                                <ItemTemplate>      
    <asp:Button CommandArgument="<%#Container.ItemIndex %>" ID="reply" runat="server"
                                                    Text="评论" OnClick="reply_Click" Width="45px" Height="25px" CssClass="button" />
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="reply" EventName="Click" />
    </Triggers>
    </div> 
      

  3.   


    报错了因为我的reply是嵌套在一个repeater里面的所以加了这个东西后报如下的错误:无法为 UpdatePanel“UpdatePanelGridDetail”中的触发器找到 ID 为“reply”的控件。
      

  4.   

     <asp:UpdatePanel ID="UpdatePanelGridDetail" runat="server">
                <ContentTemplate>
    <div class="publishBlock">                             
                                        <div class="message">
                                            <img src='<%#Eval("Userimg")%>' alt="用户头像" width="60" height="60" /></div>
                                        <div class="total">
                                            <div class="content">
                                                <asp:LinkButton ID="Realname1" runat="server" Style="text-decoration: none;"><%#Eval("Realname") %>: </asp:LinkButton>
                                                <%#Getshare((Eval("ShareId")).ToString()) %></div>
                                            <asp:Panel ID="Panelreply" runat="server" Visible="false">
                                            <div class="comment">
                                            <div class="combtn">
                                              <asp:TextBox ID="comment" runat="server" TextMode="MultiLine" Height="30" Width="400px"
                                                    CssClass="text"></asp:TextBox>
                                                <asp:Button CommandArgument="<%#Container.ItemIndex %>" ID="reply" runat="server"
                                                    Text="评论" OnClick="reply_Click" Width="45px" Height="25px" CssClass="button" /></div> 
                                           <asp:Repeater ID="commentrep" runat="server">
                                               <ItemTemplate> 
                                                 <div class="comm">
                                                        <div class="littlephoto">
                                                            <img src='<%#Eval("UserImg") %>' width="30" height="30" alt="" /></div>
                                                        <div class="arguement">
                                                            <asp:LinkButton ID="Realname2" runat="server" Style="text-decoration: none"><%#Eval("Realname") %>:</asp:LinkButton>
                                                            <%#Eval("Comments") %>(<%#Eval("CreateDate") %>)</div>
                                                    </div>
                                                </ItemTemplate>
                                            </asp:Repeater>
                                            </div>
                                            </asp:Panel>
                                            </div>
                                        </div>              
    </ContentTemplate>
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="reply" EventName="Click" />
    </Triggers>
            </asp:UpdatePanel>
      

  5.   


    还是报错好像是 <asp:Button CommandArgument="<%#Container.ItemIndex %>" > 这个的问题CS1061: “System.Web.UI.Control”不包含“ItemIndex”的定义,并且找不到可接受类型为“System.Web.UI.Control”的第一个参数的扩展方法“ItemIndex”(是否缺少 using 指令或程序集引用?)
      

  6.   

    asp:UpdatePanel ID="UpdatePanelGridDetail"   UpdateMode="Conditional" runat="server">
                <ContentTemplate>
    内有红色部分当然不能局部刷新了