0

我需要一个建议如何更正我的代码。我正在使用 FindControl 方法在 Repeater 中查找 TextBox。这是我的标记:

<asp:Repeater ID="Repeater1">
    HERE ARE SOME OTHER DATA
    <ItemTemplate>
         <asp:FormView ID="FormViewAddComment" runat="server"
             DataSourceID="SqlDataSourceInsertComments" DefaultMode="Insert"
             OnItemInserted="FormViewAddComment_ItemInserted" 
             OnItemInserting="FormViewAddComment_ItemInserting">
             <InsertItemTemplate>
                 <asp:TextBox ID="txtAddComment" runat="server" CssClass="textbox"
                     Text='<%# Bind("CommentText") %>' Width="200px" />
                 <asp:Button ID="btnAddComment" runat="server" CssClass="button"
                      Text="Comment" CommandName="Insert" CausesValidation="false"/>
             </InsertItemTemplate>
         </asp:FormView>  
    </ItemTemplate>
</asp:Repeater>

这是我背后的代码:

Protected Sub FormViewAddComment_ItemInserting(sender As Object, e As FormViewInsertEventArgs)
    Dim FormView As FormView = DirectCast(Repeater1.FindControl("FormViewAddComment"), FormView)
    Dim Comment As TextBox = DirectCast(FormView.FindControl("txtAddComment"), TextBox)
    If Comment.Text = "" Then
        Exit Sub
    End If
End Sub

未找到 Comment TextBox,并且代码在尝试访问 Text 属性时引发对象引用错误。

4

2 回答 2

0

您可以使用 ItemDataBound 事件在其中找到文本框。

谢谢

于 2013-02-26T07:32:42.803 回答
0

您正在访问"txtAddCommentFormView中的“,那么为什么要在Repeater中找到FormView,然后再在其中的文本框中找到...您可以直接找到它...

Protected Sub FormViewAddComment_ItemInserting(sender As Object, e As FormViewInsertEventArgs)
        If (FormView1.CurrentMode == FormViewMode.Insert)      
            Dim Comment As TextBox = DirectCast(FormViewAddComment.FindControl("txtAddComment"), TextBox)
        If Comment.Text = "" Then
            Exit Sub
        End If
    End Sub

编辑:-

我的观点是你在ItemInsertingEvent of中写代码FormView,所以你可以直接找到FormView。我建议使用NamingContaineroredr中的属性来找到触发事件的FormView,这样你就可以找到FormView然后你可以很容易地在其中找到TextBox。这里有 Gridview 的 NamingContainer 示例

于 2013-02-26T07:34:23.097 回答