ASP.NET w/ VB.NET - Winforms to Web - ошибка NullReferenceException при разбиении строки / построителе строки

Предыстория: у меня есть приложение winForm, которое регистрирует пользователя в базе данных на основе предоставленной информации, автоматически генерирует случайный пароль и имя пользователя и отправляет пользователю по электронной почте ссылку на приложение для выбранной маркетинговой компании.

Проблема:

  • Когда пользователь нажимает "Отправить приглашение" с данными, введенными во все поля, кроме списка пакетов в отладке, выдается ошибка NullReferenceException, выделяющая строку: Dim MCShort As String = Trim(splitMC(0))

Как я могу исправить эту проблему

Вот скриншот веб-приложения:

скриншот веб-приложения

Вот код метода 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

2 ответа

Решение

Для первого вопроса вы можете использовать событие OnSelectedIndexChanged для lbCarriers.

Что касается вопроса об отсутствующих данных при отправке, вы должны использовать своего рода проверку на представленной странице. ASP.Net включает в себя набор элементов управления проверкой, которые облегчают работу. На простейшем уровне вы можете установить необходимые элементы управления формой, и это позволит форме запрашивать у пользователя заполнение всех обязательных полей до того, как сработают события выделенного кода.

Я переписал следующие области кода, чтобы избавиться от ошибки:

    ''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
Другие вопросы по тегам