VB.NET Obj Ref未在datetime中设置

时间:2014-07-30 11:05:22

标签: asp.net vb.net

我通过广泛的谷歌搜索'看到了类似的问题。但是没有人能够解决这个问题,我从VS13得到的错误如下:

  

类型' System.NullReferenceException'的例外情况发生在   my.dll但未在用户代码中处理。附加信息:   对象引用未设置为对象的实例。

简单地说,我希望在日历文本框中填充默认日期值,这样用户就不必选择日期,或者如果他们忘记等,则会将系统时间放入。

我尝试过转换为String等,但我得到了同样的错误。

感谢任何帮助。

提前致谢。

代码背后:

Public Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        Dim SrtDateTxt As New TextBox
        SrtDateTxt = ListView1.FindControl("StartDateTextBox")
        SrtDateTxt.Text = DateTime.Now
    End If
End Sub

上面代码所涉及的aspx:

<asp:TextBox ID="StartDateTextBox" runat="server" Text='<%# Bind("StartDate") %>' Width="150px"/>
<act:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="StartDateTextBox" Format="yyyy-MM-dd"></act:CalendarExtender>

1 个答案:

答案 0 :(得分:2)

首先,我想建议将Option Strict更改为&#34; On&#34;在您的项目设置中。这不会阻止编译器错误,但会阻止恶劣的运行时错误。修复编译器错误将教会您很多.NET框架中的类型。

然后例如,这将不再编译:

SrtDateTxt.Text = DateTime.Now

您需要指定一个字符串而不是日期:

SrtDateTxt.Text = DateTime.Now.ToString() ' or ToShortDateString()

接下来,这将阻止您访问NullRefernceException

Dim SrtDateTxt As New TextBox

如果您之后为此变量分配另一行值:

SrtDateTxt = ListView1.FindControl("StartDateTextBox")

所以我假设SrtDateTxtNothing,因为在ListView中没有对该ID的控制,但在其中一个ListViewItems(这是不同的NamingContainer s。。

因此,当您尝试访问属性时,您会在下一行获得异常

SrtDateTxt.Text = DateTime.Now ' at .Text

ListView旨在用于多个项目。因此,您需要使用正确的ListViewItem

For Each item As ListViewItem In ListView1.Items
    Dim StartDateTextBox = DirectCast(item.FindControl("StartDateTextBox"), TextBox)
    '  ... '
Next

这会循环所有项目,我不知道这是否是您想要做的。