当我尝试向asp.net细节视图添加插入值时,出现“对象引用未设置为对象实例”的错误。

3

如何修复“对象引用未设置为对象实例”的错误。它指的是哪个对象?

代码:

Private Sub dvSMasterCurrentYear_DataBound(sender As Object, e As EventArgs) Handles dvSMasterCurrentYear.DataBound
    Dim dv As DetailsView = New DetailsView
    If DetailsViewMode.Insert Then
        DirectCast(dv.FindControl("PlantYear"), TextBox).Text = GetYear()
    End If
End Sub

GetYear返回当前年份,它显示在DetailsView文本框“PlantYear”中。我尝试使用以上代码插入该值。

感谢您的帮助。


你必须允许FindControl返回null/Nothing。如果它这样做,那么代码将抛出NRE异常。 - Ňɏssa Pøngjǣrdenlarp
1个回答

4

很可能FindControl并没有真正找到控件。最好进行检查,确保它已经找到了你想要找的内容:

Private Sub dvSMasterCurrentYear_DataBound(sender As Object, e As EventArgs) Handles dvSMasterCurrentYear.DataBound
    Dim dv As DetailsView = New DetailsView
    If DetailsViewMode.Insert Then
        Dim ctl = dv.FindControl("PlantYear")
        If ctl IsNot Nothing Then
            DirectCast(dv.FindControl("PlantYear"), TextBox).Text = GetYear()
        Else
            Throw New Exception("Control was not found")
        End If        
    End If
End Sub

这解决了空对象引用的问题。但我仍无法将值保存到记录中。以下是我用于获取年份的函数:Public Function GetYear() Dim thisDate As Date = Now Dim thisYear As String 'thisDate = #2/12/1969# thisYear = Year(thisDate) Return thisYear End Function - jim davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接