2009-06-10 6 views
0

아래 코드는 내 ASP 웹 사이트에서 드롭 다운을 추가해야합니다. 이미 잘못 추가했는지 확인해주세요.드롭 다운 NullReferenceException

Function collectEmailBodyText() 
     Try 
      Dim counterEnd As Integer = subActivated_HowManyControlsInAPanel() 
      Dim counter As Integer = 0 
      Dim tempPanelLabel As Label 
      Dim tempPanelInputBox As TextBox 
      Dim tempPanelDropDownBox As DropDownList 
      Dim tempCollector As String 
      Dim panelUsed As String = "" 
      '* Find out which panel is used to collect panel data: 
      panelUsed = view0_panelUsed.ToString 
      Response.Write("<!-- " + panelUsed + " -->") 
      ' 
      tempCollector = "<p><b>" + lbl_viewTitle0.Text + "</b>" 
      tempCollector = tempCollector + "<br>" + lbl_view0_firstName.Text + ": " + txt_firstName.Text 
      tempCollector = tempCollector + "<br>" + lbl_view0_surname.Text + ": " + txtSurName.Text 
      tempCollector = tempCollector + "<br>" + lbl_view0_ContactNum.Text + ": " + txt_contactNum.Text 
      ' 
      tempCollector = tempCollector + "<p><b>" + lbl_viewTitle1.Text + "</b>" 
      tempCollector = tempCollector + "<br>" + lbl_view1_firstName.Text + ": " + txt_view1_firstname.Text 
      tempCollector = tempCollector + "<br>" + lbl_view1_surname.Text + ": " + txt_view1_surname.Text 
      tempCollector = tempCollector + "<br>" + lbl_view1_userID.Text + " " + txt_view1_userID.Text 
      tempCollector = tempCollector + "<br>" + lbl_view1_workUnit.Text + ": " + ddl_view1_workunit.SelectedItem.Text + " :: " + ddl_view1_workunit.SelectedValue.ToString() 
      tempCollector = tempCollector + "<br>" + lbl_view0_typeOfRequest.Text + ": " + ddl_view0_typeOfRequest.SelectedItem.ToString 
      tempCollector = tempCollector + "<br>" + lbl_view0_workUnitLevel.Text + ": " + ddl_view0_workUnitLevel.SelectedItem.ToString + "<br>" 
      ' 
      '* Collect panel data: 
      Do 
       counter = counter + 1 
       tempPanelLabel = New Label 
       tempPanelInputBox = New TextBox 
       tempPanelDropDownBox = New DropDownList 
       tempPanelLabel = form1.FindControl("lbl_" + panelUsed + "_label" + counter.ToString()) 
       tempPanelInputBox = form1.FindControl("txt_" + panelUsed + "_input" + counter.ToString()) 
       tempPanelDropDownBox = DirectCast(form1.FindControl(("txt_" & panelUsed & "_ddinput") + counter.ToString()), DropDownList) 

       tempCollector = tempCollector + "<br>" + tempPanelLabel.Text 
       'tempCollector = tempCollector + ": " + tempPanelInputBox.Text 
       tempCollector = tempCollector + ": " + tempPanelDropDownBox.SelectedValue 


      Loop Until counter = counterEnd 
      ' 
      If storeSelected() = 0 Then 
       tempCollector = tempCollector + "<p><b>" + lbl_viewTitle2.Text + "</b>" 
       tempCollector = tempCollector + "<br>" + lbl_view2_ManagersEmailAddress.Text + ": " + txt_view2_ManagersEmailAddress.Text 
      End If 
      ' 
      Return tempCollector 
     Catch ex As Exception 
      Return ex.ToString() 
      Response.Write(ex.ToString()) 
     End Try 

    End Function 

다음은 내가

tempPanelDropDownBox = DirectCast(form1.FindControl(("txt_" & panelUsed & "_ddinput") + counter.ToString()), DropDownList) 

을 추가 여분의 라인이고, 나는 다음과 같은 오류가 점점 오전 :

System.NullReferenceException : 개체의 인스턴스로 설정되지 않았습니다 Object 참조. WebApplication1._Default.collectEmailBodyText() C : \ v1.5_production_05June09 \ Default.aspx.vb : line 220

+0

왜 다시 질문을 게시하고 있습니까? – Shoban

+0

이전에 코드를 게시하지 않았습니다. – SmartestVEGA

+0

@SmartestVEGA : 새 질문을 게시하는 대신 코드 샘플로 원래 질문을 업데이트하십시오 (태그 바로 아래 오른쪽에 편집 링크가 있음). 여러 스레드에 퍼져 있다면 질문에 대답하기가 정말 어렵습니다. –

답변

1

어떤 개체가 줄 번호가 주어진 줄은 알 수 있지만 줄의 추측은

tempPanelInputBox = form1.FindControl("txt_" + panelUsed + "_input" + counter.ToString()) 

가 실패 형태,이 될 것이기 때문에 부품에 의해 발생 된 이름 "txt_"+ panelUsed + "_input"+ counter.ToString()는 폼 내의 제어와 일치하지 않는다.

그래서 파일 내에서 220 행을보고 찾고있는 컨트롤이 양식 내에 나타나는지 확인하십시오.

그것을보고 후, 나는

(당신이 드롭 다운의 DDL의 이름을 그 가정을 바탕으로) DD하지 라인이

tempPanelDropDownBox = DirectCast(form1.FindControl(("txt_" & panelUsed & "_ddinput") + counter.ToString()), DropDownList) 

tempPanelDropDownBox = DirectCast(form1.FindControl(("txt_" & panelUsed & "_ddlinput") + counter.ToString()), DropDownList) 

이름의 차이 인 DDL을 읽어해야한다고 생각

+0

이것은 라인 220 tempCollector = tempCollector + ""+ tempPanelDropDownBox.text 난 형태 – SmartestVEGA

+0

없이 이름 드롭 다운 목록에서 값을 선택했는지는 그것이 상기 txt_ 인 경우에 – SmartestVEGA

+0

를 DDL NOT DD된다 currect 인 스타트? 하루가 끝날 때 FindControl 함수에 전달하기 위해 생성 한 문자열이 컨트롤 이름과 일치하지 않습니다. 특정 드롭 다운이 만들어진 곳을 알려 주실 수 있습니까?나는 그것이보기로 전환되고있는 문제의 드롭 다운 표시됩니다 다른 드롭 다운에 가게라는 옵션을 선택하면 txt_panview3_ddinput1 이 – Tetraneutron

1

코드에서 연결하려는 이름을 가진 컨트롤이 없거나 연결이 적절하지 않은 경우이 오류가 발생할 수 있습니다.

먼저 findcontrol 함수를 수행하고 값을 얻기 전에 null이 아닌지 확인하십시오.

디버깅을 위해 "panelUsed"가 예상 한 것일 수도 있습니다. 변수가 올바르게 설정되지 않아 빈 문자열이면 오류가 발생할 수 있습니다.

1

디버거를 사용해보세요! 단계별로 이동하면 오류가 표시됩니다.