对象引用未设置为ASP.net中对象的实例
基本上,我试图在共享函数内的文本框上进行输出,但我没有访问共享函数内的文本框,然后我创建了一个默认类的对象来访问文本框。对象引用未设置为ASP.net中对象的实例,asp.net,.net,vb.net,Asp.net,.net,Vb.net,基本上,我试图在共享函数内的文本框上进行输出,但我没有访问共享函数内的文本框,然后我创建了一个默认类的对象来访问文本框。 之后,我访问Textbox,但在运行状态下,它会给我错误NullReference,当我切换时,我发现Textbox1.text=Nothing而不是Textbox1.text=”“ 下面是我为示例编写的小代码 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handle
之后,我访问Textbox,但在运行状态下,它会给我错误NullReference,当我切换时,我发现Textbox1.text=Nothing而不是Textbox1.text=”“
下面是我为示例编写的小代码
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Me.Load
TextBox1.Text = "123"
TestClass()
End Sub
Protected Shared Sub TestClass()
Dim MyF1 As New _Default
MyF1.TextBox1.Text = "ABC"
End Sub
TextBox1
是页面类的实例变量,可能由ASP.NET设计器创建
因此,您无法在静态/共享上下文中访问它
当ASP.NET收到请求时,它会:
- 创建_默认类的实例
- 根据来自客户端的数据(例如表单数据)填充_Default类的控件
- 执行许多与此上下文无关的其他操作
\u Default
类的实例,但不设置其任何属性
这会导致Textbox1
属性为null,这就是为什么它在使用时抛出NullreferenceException
有两种可能的解决方案:
- 将
方法标记为实例方法(删除TestClass
关键字)Shared
- 将
的当前实例作为参数传递给静态/共享方法,如下所示:\u Default
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load TextBox1.Text = "123" TestClass(Me) End Sub Protected Shared Sub TestClass(currentPage as _Default) currentPage.TextBox1.Text = "ABC" End Sub
TextBox1
属性声明为public
(如果有任何VB错误,很抱歉;我是C#程序员☺)
希望你能得到答案。按下面提到的方法尝试
MyF1.TextBox1 As New TextBox
MyF1.TextBox1.Text = "ABC"
它应该可以正常工作。c#标签无效,请将其更改为vb.netWhere和何时创建TextBox1?TextBox1在Design上创建Section@Wolf,此控件不是静态/共享的。默认情况下,它的访问修饰符受保护。@PankajGarg在i
TextBox1.Text=“ABC”时出现错误
line@Wolf第二种解决方案要求将TextBox1属性声明为public。不,受保护的访问修饰符就足够了。@PankajGarg你说得对,protected
就足够了。谢谢注意。我会编辑我的答案。@w0lf我可以调用TestClass(我)吗
这来自其他共享函数它给出了以下错误“方法参数必须用括号括起来”
MyF1.TextBox1 As New TextBox
MyF1.TextBox1.Text = "ABC"