无法在代码隐藏中调用函数或访问转发器中使用的控制器

Can't call a function or access a controller which is used in a repeater, in codebehinde

我在网上搜索过,但没有找到适合我的问题的答案。

问题是,当我在 ASP:Repeater 中为我的 C# ASPX 网站使用文本框和按钮来更新 SQL 服务器 table 的列时,我可以'访问代码隐藏 (ASPX.CS) 页面中的文本框和按钮。但是我找到了一种方法来 "show" 下面 link 中的 ASP:Repeater 中的那些控制器(文本框和按钮),但我实际上不能使用它们来更新网站数据库。

Can't find control within asp.net repeater?

如果有人知道如何解决这个问题,我会很高兴,回复这个。

下面是演示问题的示例代码:

ASPX 页面

                        <asp:Repeater runat="server" ID="Commentha" > 
                            <ItemTemplate>
                                <div id="comment list" style="direction: rtl; font-family: '2  Nazanin','Adobe Arabic'; font-size: large;">
                                        <div id="Replys">
                                            <%--ASP LABEL FOR SHOWING ALL REPLYS FOR THIS COMMENT--%>
                                        </div>
                                        <div id="ReplyTo">
                                            <div id="RT_Text">Reply</div>
                                            <div id="ReplyToThis">
                                                <asp:TextBox runat="server" ID="Reply" MaxLength="119"></asp:TextBox>
                                                <asp:Button runat="server"  ID="Sendit" Text="Send" />
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </ItemTemplate>
                        </asp:Repeater>

"Reply" 文本框和 "Sendit" 按钮是我所说的控制器。

而 SQL Table 有此列:

回复 nvarchar(120)

我实际上是在尝试制作一个 "Reply to a comment" 功能,类似于 Facebook 用于评论部分的 "reply" 按钮。

您需要查看与转发器关联的事件。特别是在 ItemCommand 上。下面是一个片段,可让您抓取文本框。

向按钮添加 CommandName 允许您使用 ItemCommand 事件处理程序将从它发出的请求分配给特定操作。

<asp:Button ID="Sendit" runat="server" Width="80px" Text="Send" CommandName="Send"/>

添加此事件处理程序。因此,当单击该按钮时,它将应用 if 语句中的逻辑。您可以使用 FindControl 在该行中获取控件。然后通过其对象变量访问它们。在本例中为 .txt。

 protected void Commentha_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
            if (e.CommandName == "Send")
               { 

                 TextBox txt = e.Item.FindControl("Reply") as TextBox ;
                 string replyText = txt.Text;
                  // Do SQL
                }
    }