【问题标题】:Find the right value of textbox找到文本框的正确值
【发布时间】:2013-02-28 14:12:12
【问题描述】:

我在将数据插入数据库时​​遇到问题。

 <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

我显示了一些文本,在文本下有 cmets 的文本框和按钮。我在隐藏字段中绑定 textId 以插入 cmets。代码工作正常,但我只能为转发器显示的数据库中的第一行添加注释。当我想为其他行(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)

它返回一个错误,对象引用未设置为对象的实例

如何获得具有正确值的正确文本框? 谢谢你的回答

【问题讨论】:

    标签: asp.net html vb.net findcontrol


    【解决方案1】:

    将发送者转换为发送它的按钮,然后从父级获取文本框。示例:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      相关资源
      最近更新 更多