我需要一些如何纠正我的代码的建议。我正在使用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属性时抛出Object引用错误。
答案 0 :(得分:0)
您可以使用ItemDataBound事件在其中找到文本框。
由于
答案 1 :(得分:0)
你正在访问FormView中的"txtAddComment
“,那你为什么要在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
编辑: -
我的观点是你在ItemInserting
FormView
事件中编写代码,所以你可以直接找到FormView。我建议在oredr中使用NamingContainer
属性来查找触发事件的FormView,通过这种方式您可以找到FormView,然后您可以轻松找到其中的TextBox。
Gridview Here