我通过广泛的谷歌搜索'看到了类似的问题。但是没有人能够解决这个问题,我从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>
答案 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")
所以我假设SrtDateTxt
是Nothing
,因为在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
这会循环所有项目,我不知道这是否是您想要做的。