2011-12-03 15 views
0

ドロップダウンメニューで[Other]を選択すると、<p>タグにラベルとテキストボックスを追加します。 <p>タグにrunat=serverを追加しました。SelectedIndexコントロールを追加

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

ヒント: 'As X = New X'は必要ありません。あなたは 'As New X'を実行することができます。たとえば、 'deptLbl As New Label()'のようにします。 – Ryan

答えて

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 -eventを処理することはできません。 ViewStateを正しく読み込むには、すべてのポストバックでIDが同じである必要があります。

私の回答はthis questionです。NullReferenceExceptionについて説明しています。 MasterPageのコンテンツページ内からの特殊な振る舞いです。FindControlです。

関連する問題