ASP.NET w/VB.NET-Winforms to Web-NullReferenceException字符串拆分/字符串生成器上出现错误

ASP.NET w/VB.NET-Winforms to Web-NullReferenceException字符串拆分/字符串生成器上出现错误,vb.net,error-handling,stringbuilder,string-split,winforms-to-web,Vb.net,Error Handling,Stringbuilder,String Split,Winforms To Web,背景:我有一个winForm应用程序,它根据提供的信息在数据库中注册用户,自动生成随机密码和用户名,并通过电子邮件向用户发送链接,以根据所选的营销公司获取应用程序 问题: 当用户单击“发送邀请”并在除调试中的bundles列表框之外的所有字段中输入数据时,将抛出NullReferenceException错误,突出显示以下行:Dim MCShort As String=Trim(splitMC(0)) 如何解决此问题 以下是该web应用程序的屏幕截图: 以下是发送按钮单击方法off def

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

问题:

  • 当用户单击“发送邀请”并在除调试中的bundles列表框之外的所有字段中输入数据时,将抛出NullReferenceException错误,突出显示以下行:Dim MCShort As String=Trim(splitMC(0))
如何解决此问题

以下是该web应用程序的屏幕截图:

以下是发送按钮单击方法off 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
Private Sub Send_按钮_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)处理发送按钮。单击
'TODO添加代码以验证是否满足所需的所有选择。
'不需要电子邮件和附加邮件
Dim firstname As String=txtFirstName.Text
Dim lastname As String=txtLastName.Text
Dim ccEmail As String=txtcemail.Text
使某人成为新的架线工
某人加上一行(“”)
某人加上一行(“”)
某人加上一行(“”)
某人加上一行(“”)
''获得营销公司的简称
Dim splitMC As String()=拆分(marketingCo.SelectedItem,“|”)
Dim MCShort作为字符串=修剪(拆分MC(0))
sb.AppendLine(String.Format(“{0}”,MCShort))
'sb.AppendLine(String.Format(“{0}”,My.Settings.MarketingCompanyShortName))
sb.AppendLine(String.Format(“{0}”,txtcemail.Text))
sb.AppendLine(String.Format(“{0}”,txtMessage.Text))
sb.AppendLine(String.Format(“{0}”,txtmarketname.Text))
某人加上一行(“”)
sb.AppendLine(String.Format(“{0}”,txtFirstName.Text))
sb.AppendLine(String.Format(“{0}”,txtLastName.Text))
sb.AppendLine(String.Format(“{0}”,txtEmail.Text))
某人附言(“123456”)
Dim spltBundles()作为字符串
对于捆绑包中的每个项目。项目
如果修剪(项目)“,则
spltBundles=拆分(项目“|”)
某人加上一行(“”)
sb.AppendLine(String.Format(“{0}”),Trim(spltBundles(0)))
sb.AppendLine(String.Format(“{0}”),Trim(spltBundles(1)))
某人加上一行(“”)
如果结束
下一个
某人加上一行(“”)
某人加上一行(“”)
某人加上一行(“”)
某人加上一行(“”)
Dim xmlStr=sb.ToString
Dim int1作为Boolean=proxy.AddContractOpportunity(xmlStr.ToString,“test”,“test”)
MsgBox(“已发送aComp邀请!”)
端接头

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


关于提交时缺少数据的问题,您应该在提交的页面上使用某种验证。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

谢谢你的回复。如何为lbCarriers实现OnSelectedIndexChanged事件?我在除包之外的所有记录中都有数据,因此验证控制可能不是问题。你还有其他建议吗?