最近在做一个类似微博的社交网站,其中用户分享的信息我是用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 + ""); }
下面给出部分代码。我想要的效果是当点击评论按钮后,第二个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 + ""); }
<asp:AsyncPostBackTrigger ControlID="reply" EventName="Click" />
</Triggers>
<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>
报错了因为我的reply是嵌套在一个repeater里面的所以加了这个东西后报如下的错误:无法为 UpdatePanel“UpdatePanelGridDetail”中的触发器找到 ID 为“reply”的控件。
<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>
还是报错好像是 <asp:Button CommandArgument="<%#Container.ItemIndex %>" > 这个的问题CS1061: “System.Web.UI.Control”不包含“ItemIndex”的定义,并且找不到可接受类型为“System.Web.UI.Control”的第一个参数的扩展方法“ItemIndex”(是否缺少 using 指令或程序集引用?)
<ContentTemplate>
内有红色部分当然不能局部刷新了