Asp.net TexBox不会启用类型为“的捕获异常”;对象引用未设置为实例";
我正在从事一个用Visual Basic编写的项目。我有一个复选框和e文本框,我想在选中复选框时启用文本框。 这是我的代码:Asp.net TexBox不会启用类型为“的捕获异常”;对象引用未设置为实例";,asp.net,vb.net,checkbox,textbox,Asp.net,Vb.net,Checkbox,Textbox,我正在从事一个用Visual Basic编写的项目。我有一个复选框和e文本框,我想在选中复选框时启用文本框。 这是我的代码: Public Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged Dim CheckBox3 As CheckBox = DirectCast(sender, Ch
Public Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
Dim CheckBox3 As CheckBox = DirectCast(sender, CheckBox)
convertToStaff = CheckBox3.Checked
If CheckBox3.Checked = True Then
test.Enabled = True
convertToStaff = CheckBox3.Checked
Session("convertToStaff") = convertToStaff
End If
End Sub
这是我的前端代码
<td style="width:100px; ">Staff:        
<asp:CheckBox ID="CheckBox3" runat="server" Checked="false"
AutoPostBack="True"
OnCheckedChanged="CheckBox3_CheckedChanged" />
</td>
<td style="width:200px; ">
<asp:TextBox ID="test" runat="server" class="text_box"
Enabled="False"></asp:TextBox>
</telerik:RadTextBox>
</td>
员工:
由于某些原因,我不理解行test.Enabled=True
将抛出未设置为实例的Object Reference类型的异常
知道我哪里做错了吗?1-进入设计师屏幕
2-通过单击您的rad文本框来选择它
3-在“属性”窗口中,拾取文本框的名称(可能类似于TextBox1或RadTextBox1)。在某处记下或用ctrl+c复制它
4-返回您的代码。调暗rad文本框时,将创建radtextbox。这不是你使用控件的方式。你想让它使用你刚才提到的文本框吗。因此,与前面的代码片段不同,请尝试以下操作:
If convertToStaff = True Then
TheNameOfTheTextBoxYouNotedEarlier.Enabled = True
Session("convertToStaff") = convertToStaff
End If
这将“瞄准”您在表单设计器中创建的文本框,即您可以在屏幕上看到的文本框。我创建了一些基本代码,看看这是否对您有帮助
前端
<body>
<form id="form1" runat="server">
<table>
<tr>
<td>
<asp:CheckBox ID="CheckBox3" runat="server" Checked="false" AutoPostBack="true" Text="Check me"/>
</td>
<td>
<asp:TextBox ID="RadTextBox2" Width="100%" runat="server" CssClass="text_box" Enabled="false"/>
</td>
</tr>
</table>
</form>
</body>
您没有将文本框设置为启用状态,但实例化了一个完整的新文本框(Dim RadTextBox2 As new RadTextBox
),并将其设置为启用状态。您在哪里存储对实际要启用的文本框的引用?@RenéVogt如果我将Dim RadTextBox2作为新RadTextBox删除,并在RadTextBox2中停止调试的文件的开头将其声明为Dim RadTextBox2作为RadTextBox。Enabled=True行。我不明白存储对文本框的引用是什么意思?你能发布你的前端吗?显然,您正在创建一个新的文本框,并启用它,但您根本没有将其绑定到前端。您是否希望在选中复选框后,此文本框显示在前端?我看到对会话的调用您确定没有使用asp.net或其他任何东西吗?我问这个问题也是因为RadTextBox
是Telerik的一个常见web控件…@Juli如果你为整个项目启用,它是否显示了你可以纠正的问题?有可能(祈求好运)在那之后还能用。我想你指的是身份证吧?我试过如果convertToStaff=True,然后将Dim测试作为文本框测试。Enabled=True会话(“convertToStaff”)=convertToStaff End如果这是您的意思,但在执行test.Enabled=True时,它不起作用,停止调试并不执行任何操作。test是我的文本框的id*mean。我是说。当您调暗Sub中的文本框时,您将创建一个新的文本框。你看不到它,首先是因为你没有把它放在表单上,其次是因为它就像一个局部变量:它被包含在Sub的作用域中,然后随它一起消失。你的电脑运行Sub只需几分之一秒;即使你用编程的方式将新的文本框放在表单上,它也不会显示在你缓慢的人眼上。如果可以看到代码,但无法看到表单设计器,请尝试按shift+F7。右键单击所需控件并查看属性。你会明白的。我问你是因为我没有一个名为name only ID的属性,而在我主要工作的C#中,我们通过ID将元素作为目标。无论如何,谢谢你。我已经试过你的代码了,正如我出于某种原因告诉你的,当我试图执行enable rowYeah时,它让我摆脱了调试,它似乎是等效的。在我看来,这个错误似乎是你仍然调暗了你的文本框。不要那样做,它已经存在了。当您将Dim测试作为文本框编写时,您创建了一个名为“test”的文本框,并且默认情况下使用这个文本框,因为它更接近Sub的范围。这就是为什么它什么都不做。相反,使用test.Enabled=True而不使用Dim,您将访问表单的文本框(并且将能够声明胜利!)我不再按照您的建议对其进行Dim,我还更新了问题中的代码。问题是,现在TextBox.Enabled=True行抛出类型为“Object Reference not set to a instance”的异常。谢谢,我看不出与我的代码有多大区别,但我还是尝试了。由于某些原因,当执行RadTextBox2.Enabled=True时,它使我脱离调试,对我的textbox不做任何操作一件事,我从前端删除了OnSelectionChanged,只在后面的代码中处理它。你可能想在你的帖子中为#telerik添加一个标签,看看是否有人可以添加一些知识。我以为这就像普通的asp。顺便说一句,我发布的这段代码运行良好,并在回发时启用文本框。编辑:我说的是OnSelectioChanged…我的意思是OnCheckedChanged。将其从前端移除,并在后面的代码中保留“Handles CheckBox3.CheckedChanged”(在我的情况下)如果不在前端使用,则不会进入功能。无论如何,我将代码放入了一个try-catch中,看到启用的行抛出了一个类型为Object-reference的异常,而不是设置为对象的实例。
Partial Class _StackOverflowTest
Inherits System.Web.UI.Page
Public Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
End Sub
Public Sub CheckBox3_CheckChanged(ByVal sender As Object, ByVal e As EventArgs) Handles CheckBox3.CheckedChanged
If CheckBox3.Checked Then
RadTextBox2.Enabled = True
End If
End Sub
End Class