0

背景:我有一个 winForm 应用程序,它根据提供的信息在数据库中注册一个用户,自动生成一个随机密码和用户名,并通过电子邮件向用户发送一个链接,以根据所选的营销公司获取应用程序。

问题:

  • 当用户单击“发送邀请”并在调试中除捆绑列表框之外的所有字段上输入数据时,会引发 NullReferenceException 错误,突出显示以下行:Dim MCShort As String = Trim(splitMC(0))

我该如何解决这个问题

这是网络应用程序的屏幕截图:

网络应用截图

下面是 default.asx.vb 的 Send_Button_Click 方法的代码:

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
4

2 回答 2

1

对于您的第一个问题,您可以使用 lbCarriers 的 OnSelectedIndexChanged 事件。

关于提交时缺少数据的问题,您应该在提交的页面上使用某种验证。ASP.Net包含一组验证控件,使工作变得简单。在最简单的级别上,您可以将表单控件设置为必需,这将允许表单在触发代码隐藏事件之前提示用户填写所有必填字段。

于 2011-04-11T18:38:09.180 回答
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
于 2011-04-11T20:48:19.323 回答