微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用 VB 应用程序在 ASP.Net MVC 上查明空引用异常

如何解决无法使用 VB 应用程序在 ASP.Net MVC 上查明空引用异常

使用其他人的 VB.Net 代码View 正在抛出 'Object reference not set to an instance of an object.',我的理解是“该对象在使用前尚未初始化。”。即使在使用断点进行调试之后,也无法确定问题的确切位置。我尝试了 here 提出的建议,但运气不佳。

分享所涉及的功能,如果有人能发现问题:

Public Function EditBefore(id As String) As UXEmailTemplate
    Dim m_EmailTemplate As UXEmailTemplate = GetEmailTemplate(id)
        Try

            Dim m_GetEmailTemplate As New UXEmailTemplate

            With m_GetEmailTemplate
                .Versions = GetVersions(m_EmailTemplate.ParentID).ToList()
            End With

            With m_EmailTemplate
                .Versions = m_GetEmailTemplate.Versions
            End With

            Return m_EmailTemplate

        Catch ex As Exception
            ex.ToString()
            _c.WriteError(System.Reflection.MethodInfo.GetCurrentMethod.ToString,String.Concat("ERROR: ",ex.ToString))
            Return m_EmailTemplate
        End Try
    End Function


        Public Function GetEmailTemplate(id As String) As UXEmailTemplate

        Dim m_EmailTemplates As List(Of UXEmailTemplate)
        GetEmailTemplate = nothing

        m_EmailTemplates = GetAllEmailTemplates()

        If m_EmailTemplates IsNot nothing Then
            For Each m_EmailTemplate As UXEmailTemplate In m_EmailTemplates
                If m_EmailTemplate.ID.Equals(id) Then
                    GetEmailTemplate = m_EmailTemplate
                    Exit For
                End If
            Next
        Else
            Return nothing
        End If

    End Function

它中断的 View 代码是:

  <div Class="col-sm-4">
      @If (Model.Versions.Count > 1) Then            <<<<<<< here exception occurs (returns nothing)
        @<div Class="cardFull" style="padding-top:20px;">
            <div Class="labelUX">Email Template Versions</div>
        </div>
      @<div Class="cardFull CheckBoxlisten">
           <div id="CheckBoxlisten" Class="CheckBoxlistenContent" style="background-color: lightgrey;">
               @For Each item In Model.Versions
                @<p>Version <a href="\KI\NewsletterEdit\@item.ID">@item.Version</a></p>Next
                                </div>
      </div>End If
    </div>

控制器:

 <HttpPost()>
    <ValidateInput(False)>
    <ValidateAntiForgeryToken()>
    Function NewsletterEdit(<Bind(Include:="ID,SendFrom,Subject,Text,HtmlText,CreatedDate,Version,ParentID")> ByVal item As UXEmailTemplate,url As String) As ActionResult
        If ModelState.IsValid Then
            Dim m_Error As Boolean = False
            If item Is nothing Then
                ModelState.AddModelError("","unexpected error")
                m_Error = True
            End If

            Dim m_Message As String = String.Empty

            If Not m_Error Then
                m_Message = dbEmail.EditEmailTemplate(item)
            End If

            If Not String.IsNullOrEmpty(m_Message) Then
                ModelState.AddModelError("",m_Message)
                m_Error = True
            End If

            If m_Error = True Then
                Dim m_EmailTemplate As New UXEmailTemplate
                Return View(m_EmailTemplate)
            End If

            If String.IsNullOrEmpty(url) Then
                Return RedirectToAction("../KI/Newsletter")
            Else
                Return Redirect(url)
            End If
        Else
            Return View(User)
        End If

    End Function

解决方法

问题出在 Controller 函数上。当视图被调用时,它向视图传递一个空对象,它显然是 Nothing for VB.NetNull in c#

此处创建了对象,但未填充数据。

If m_Error = True Then
   Dim m_EmailTemplate As New UXEmailTemplate <<< this will throw NullReferrence exception
       Return View(m_EmailTemplate)
End If

解决方案:为对象填充一些数据。

If m_Error = True Then
   Dim m_EmailTemplate As New UXEmailTemplate 
   m_EmailTemplate = GetETemplate(id)   <<<<call the function which will return the object for the view 
       Return View(m_EmailTemplate)
End If

我找到了对错误 Object reference not set to an instance of an object. 的很好的解释。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?