0

背景:我有一個winForm應用程序,它根據提供的信息在數據庫中註冊一個用戶,自動生成一個隨機密碼和用戶名,並通過電子郵件向用戶發送鏈接,以根據所選營銷公司提交申請。ASP.NET w/VB.NET - Winforms to Web - NullReferenceException字符串拆分/字符串生成器錯誤

問題:

  • 當用戶點擊「發送邀請」與輸入的數據ITON除了在調試束列表框的所有字段,所述的NullReferenceException錯誤被拋出突出行:Dim MCShort作爲字符串= TRIM(splitMC (0))

如何解決這個問題

這裏的web應用程序的截圖:

web app screenshot

這裏的Send_Button_Click方法default.asx.vb的斷碼:

Private Sub Send_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Send_Button.Click 

    'TODO Add code to validate that all selections that are reaquired are met. 
    'ccemail and the additional message are not required 
    Dim firstname As String = txtFirstName.Text 
    Dim lastname As String = txtLastName.Text 
    Dim ccEmail As String = txtccEmail.Text 

    Dim sb As New StringBuilder 

    sb.AppendLine("<?xml version=""1.0"" encoding=""utf-8""?>") 
    sb.AppendLine("<root>") 
    sb.AppendLine("<MarketingCompany>") 
    sb.AppendLine("<MarketingCompanyName>") 

    ''Get Marketing Company Short Name 
    Dim splitMC As String() = Split(marketingCo.SelectedItem, "|") 
    Dim MCShort As String = Trim(splitMC(0)) 
    sb.AppendLine(String.Format("<MCNAme>{0}</MCNAme>", MCShort)) 


    'sb.AppendLine(String.Format("<MCNAme>{0}</MCNAme>", My.Settings.MarketingCompanyShortName)) 

    sb.AppendLine(String.Format("<ccEmail>{0}</ccEmail>", txtccEmail.Text)) 
    sb.AppendLine(String.Format("<emailMessage>{0}</emailMessage>", txtMessage.Text)) 
    sb.AppendLine(String.Format("<MarketerName>{0}</MarketerName>", txtMarketerName.Text)) 
    sb.AppendLine("<agent>") 
    sb.AppendLine(String.Format("<FirstName>{0}</FirstName>", txtFirstName.Text)) 
    sb.AppendLine(String.Format("<LastName>{0}</LastName>", txtLastName.Text)) 
    sb.AppendLine(String.Format("<Email>{0}</Email>", txtEmail.Text)) 
    sb.AppendLine("<CRMGuid>123456</CRMGuid>") 

    Dim spltBundles() As String 

    For Each item In bundles.Items 
     If Trim(item) <> "" Then 
      spltBundles = Split(item, "|") 
      sb.AppendLine("<ContractingOpportunity>") 
      sb.AppendLine(String.Format("<Carrier>{0}</Carrier>", Trim(spltBundles(0)))) 
      sb.AppendLine(String.Format("<ContractingOpportunityName>{0}</ContractingOpportunityName>", Trim(spltBundles(1)))) 
      sb.AppendLine("</ContractingOpportunity>") 
     End If 
    Next 

    sb.AppendLine("</agent>") 
    sb.AppendLine("</MarketingCompanyName>") 
    sb.AppendLine(" </MarketingCompany>") 
    sb.AppendLine(" </root>") 
    Dim xmlStr = sb.ToString 


    Dim int1 As Boolean = proxy.AddContractOpportunity(xmlStr.ToString, "test", "test") 

    MsgBox("aComp Invitation Sent! :)") 


End Sub 

回答

1

關於第一個問題,你可以使用OnSelectedIndexChanged事件lbCarriers。

關於您提交時缺少的數據問題,您應該在提交的頁面上使用某種驗證。 ASP.Net包含a set of validation controls,使工作變得簡單。在最簡單的級別上,您可以設置您的表單控件是必需的,這將允許表單在代碼隱藏事件觸發之前提示用戶填寫所有必填字段。

+0

感謝您的答覆。我將如何爲lbCarriers實施OnSelectedIndexChanged事件?我在包中除了包之外的所有記錄中都收到了這個錯誤w數據,所以驗證控件可能不是問題。你有什麼其他的建議? – 2011-04-11 18:43:30

0

我重寫了代碼的以下幾個方面來擺脫錯誤的:

''Get Marketing Company Short Name 
    Dim splitMC As String() = marketingCo.SelectedItem.ToString().Split("|") 
    Dim MCShort As String = Trim(splitMC(0)) 


Protected Sub lbCarriers_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles lbCarriers.SelectedIndexChanged 
    Dim splt() As String 
    Dim ac1 As Array 
    bundles.Items.Clear() 
    Dim item As ListItem = lbCarriers.SelectedItem 
    splt = item.ToString().Split("|") 
    ac1 = proxy.GetContractingBundles("test", "test", Trim(splt(0))) 
    For Each Pitem In ac1 
     bundles.Items.Add(Trim(splt(2)) & " | " & Pitem.FormBundleName) 
    Next 
End Sub