根据下拉菜单中“其他”的选择,我想在<p>
标记中添加标签和文本框。我在runat=server
代码中添加了<p>
。
Protected Sub deptDdl_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles deptDdl.SelectedIndexChanged
'If the user chooses other for the department type add
'a label and textbox to allow them to fill in a department not listed
If deptDdl.SelectedValue.ToString = "Other" Then
Dim deptLbl As Label = New Label
deptLbl.Text = "Enter the Department Name"
Dim deptTb As TextBox = New TextBox
deptTb.MaxLength = 20
Page.FindControl("m_ContentPlaceHolder1_deptPtag").Controls.AddAt(2, deptLbl)
Page.FindControl("m_ContentPlaceHolder1_deptPtag").Controls.AddAt(3, deptTb)
End If
End Sub
我一直得到一个未处理的异常,声明对象引用没有设置为对象的实例。
我错过了什么?
答案 0 :(得分:1)
如果您的<p>
- 标记为runat=server
,您应该可以直接在codebehind -file中引用它。给它一个ID deptPtag
,然后这应该在designer.vb文件中自动生成:
Protected WithEvents deptPtag As Global.System.Web.UI.HtmlControls.HtmlGenericControl
但是你还必须确保在每次回发时重新创建动态控件(最新的Page_Load,事件对于重新加载ViewState来说太晚了)。否则,您将无法阅读deptTb.Text
或处理TextChanged
- 事件。
每个回发的ID必须相同才能正确加载ViewState
。
我对this question的回答解释了您的NullReferenceException
。
这是MasterPage内容页面中FindControl
的特殊行为。