1

データベースにデータを挿入するデータの挿入に問題があります。

 <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1"   OnItemDataBound="Repeater1_ItemDataBound">
   <ItemTemplate> 
     <!-- Some other data (text...) -->

     <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("PostId") %>' />  

     <asp:TextBox ID="txtAddComment" runat="server" CssClass="textbox"  Width="200px" />
     <asp:Button ID="btnAddComment" runat="server" CssClass="button" Text="Comment"   CausesValidation="false" OnClick="btnAddComment_Click"/>
   </ItemTemplate>
</asp:Repeater>

背後にあるコード:

 Protected Sub btnAddComment_Click(sender As Object, e As EventArgs)
        Dim HiddenField1 As HiddenField = DirectCast(Repeater1.Items(0).FindControl("HiddenField1"), HiddenField)
        Dim txtAddComment As TextBox = DirectCast(Repeater1.Items(0).FindControl("txtAddComment"), TextBox)
        Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString.ToString)
        Try
            If txtAddComment.Text = "" Then
                Exit Sub
            Else
                conn.Open()
                Dim cmd As SqlCommand = conn.CreateCommand()
                cmd.CommandText = "INSERT INTO Comments (PostId, UserName, CommentText) VALUES (@PostId, @UserName, @Text)"

                cmd.Parameters.Add("PostId", System.Data.SqlDbType.Int).Value = CInt(HiddenField1.Value)
                cmd.Parameters.Add("UserName", System.Data.SqlDbType.NVarChar).Value = Context.User.Identity.Name
                cmd.Parameters.Add("Text", System.Data.SqlDbType.NText).Value = MakeLink(HtmlRemoval.StripTagsCharArray(txtAddComment.Text))                    
                cmd.ExecuteNonQuery()            
            End If

        Catch ex As SqlException                
        Finally
            conn.Close()
        End Try
    End Sub

テキストを表示します。テキストの下にコメント用のテキストボックスとボタンがあります。コメントを挿入するために、hiddenfieldでtextIdをバインドしています。コードは正常に機能しますが、リピーターによって表示されるデータベースの最初の行にのみコメントを追加できます。他の行(2、3 ...)にコメントを追加したい場合、ページが更新され、TextBox内のテキストはそこに残ります。

このコード行には問題があります。

Dim txtAddComment As TextBox = DirectCast(Repeater1.Items(0).FindControl("txtAddComment"), TextBox)

HiddenFieldからのIDは正しいです。ただし、上の行はページの最初のテキストボックスを参照しており、その値がnullであるため、コードは実行されません。

次のようにコード行を変更すると、次のようになります。

  Dim txtAddComment As TextBox = DirectCast(Repeater1.FindControl("txtAddComment"), TextBox)

オブジェクト参照がオブジェクトのインスタンスに設定されていないというエラーを返します。

適切な値で適切なテキストボックスを取得するにはどうすればよいですか?答えてくれてありがとう

4

1 に答える 1

0

送信者を送信したボタンにキャストしてから、親からテキストボックスを取得します。例:

Protected Sub button_click(ByVal sender As Object, ByVal e As EventArgs)
   Dim myButton As button= CType(sender, button)
   Dim myTextBox as TextBox = CType(myButton Parent.FindControl("buttonName"), TextBox)

end sub
于 2013-02-28T14:35:58.750 に答える