Ошибка загрузки файла «ссылка на объект не установлена для экземпляра объекта»

#asp.net-mvc

#asp.net-mvc

Вопрос:

У меня есть ASP.NET Проект MVC с использованием VB.NET в котором я пытаюсь загрузить файл на сервер. Но когда я пытаюсь получить имя загруженного файла, я получаю сообщение об ошибке, как указано выше.

Во время отладки я проверил значение файла, но его отображаемое значение равно нулю.

Мой класс модели:

 Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Data.OracleClient
Imports System.ComponentModel.DataAnnotations
Imports Microsoft.AspNetCore.Http

Namespace Controls_MVC.Models
    Public Class LeaveApplication
        Public Property File As IFormFile
    End Class
End Namespace
  

Это моя разметка представления:

 @ModelType SdesWeb.Controls_MVC.Models.LeaveApplication

@Code
    ViewBag.Title = ViewBag.Title
End Code

@Section js
    <script src="@Session("baseurl")/Scripts/jquery.min.js"></script>
    <script src="@Session("baseurl")/Scripts/bootstrap.min.js"></script>
End Section
<script src="@Session("baseurl")/Scripts/jquery-ui.js"></script>
<link href="@Session("baseurl")/Styles/jquery-ui.css" rel="stylesheet" />
<link href="@Session("baseurl")/Styles/jquery.dataTables.min.css" rel="stylesheet" />
<script src="@Session("baseurl")/Scripts/jquery.dataTables.min.js"></script>
<link href="@Session("baseurl")/Styles/prism.css" rel="stylesheet" />
<link href="@Session("baseurl")/Styles/chosen.css" rel="stylesheet" />

<form id="leaveapp" action="@Session("baseurl")/LeaveApplication/Save" method="post" enctype="multipart/form-data">

<div class="row pt-2 pb-0">
    <div class="col-md-12">
        <button id="btnsave" Class="btn btn-info" type="submit"><i Class="fa fa-save"></i>      Save</button>
</div>
<div class="row>
    <div class="col-md-1">
        <button type="button" id="btnattach" Class="btn btn-info btn-sm"
            onclick="document.getElementById('file').click();"><i Class="fa fa-         paperclip"></i> 
            Attach File
        </button>
            @Html.TextBoxFor(Function(Model) Model.File, New With {Key .[id] = "file", .[accept] =      "application/pdf", .[type] = "file", .[style] = "display:none"})
        </div>
</div>

</form>
  

И, наконец, это мой код контроллера:

 Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.Mvc
Imports System.Data.OracleClient
Imports SdesWeb.Controls_MVC.Models
Imports Newtonsoft.Json
Imports Microsoft.AspNetCore.Http
Imports System.IO


Namespace Controllers

    Public Class LeaveApplicationController
        Inherits Controller

        ' GET: LeaveApplication
        Function Index() As ActionResult
            Try
                ViewBag.Title = "Leave Application"
                Return View()

            Catch ex As Exception
                Session("SystemError") = ex.Message
                Return RedirectToAction("Index", "ErrorHandler")
            End Try
        End Function


        Public Function Save(LeaveApplication As LeaveApplication) As ActionResult
            Try

                dim filename as string= LeaveApplication.File.FileName
                
                MsgBox(filename)

                Return View()

            Catch ex As Exception
                Session("SystemError") = ex.Message
                Return RedirectToAction("Index", "ErrorHandler")
            End Try
        End Function
    End Class
End Namespace
  

Комментарии:

1. Пожалуйста, кто-нибудь, помогите мне, я застрял здесь на последние 2 дня.

Ответ №1:

Проблема решена. Вместо использования IFormFile я использовал класс HttpPostedFileBase, и теперь я могу получить имя файла, а также загрузить в нужную папку.