Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net Core MVC:尝试上载映像时控制器中出现NullReferenceException_C#_Asp.net Mvc_Asp.net Core - Fatal编程技术网

C# .Net Core MVC:尝试上载映像时控制器中出现NullReferenceException

C# .Net Core MVC:尝试上载映像时控制器中出现NullReferenceException,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我正在尝试添加一个功能,允许用户上传他们宠物的照片。我是MVC新手,将本教程用作指导: 视图: 问题是在按下提交按钮后,控制器根本无法从视图中获取任何有关图像的数据,尽管图像已上载到视图中: [ 当表单包含任何类型的文件元素时,必须使用“多部分/表单数据”编码。由于默认编码为“application/x-www-form-urlencoded”,请将视图中的表单标记更改为: <form asp-action="UploadPhoto" enctype="m

我正在尝试添加一个功能,允许用户上传他们宠物的照片。我是MVC新手,将本教程用作指导:

视图:

问题是在按下提交按钮后,控制器根本无法从视图中获取任何有关图像的数据,尽管图像已上载到视图中:

[


当表单包含任何类型的文件元素时,必须使用“多部分/表单数据”编码。由于默认编码为“application/x-www-form-urlencoded”,请将视图中的表单标记更改为:

 <form asp-action="UploadPhoto" enctype="multipart/form-data" method="post">

我在您的表单中没有看到任何内容表明它是
多部分的
,这在传递文件时是必需的。您也可以查看此相关帖子:()。您的表单中也没有任何与模型属性
ImageName
...
  public IActionResult UploadPhoto()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> UploadPhoto([Bind("Id,PetName,Title,Description,ImageFile")] PetPhotoModel petPhotoModel)
        {
            if (ModelState.IsValid)
            {
                //Save image to wwwroot/image
                string wwwRootPath = _hostEnvironment.WebRootPath;
                string fileName = Path.GetFileNameWithoutExtension(petPhotoModel.ImageFile.FileName);
                string extension = Path.GetExtension(petPhotoModel.ImageFile.FileName);
                petPhotoModel.ImageName = fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension;
                string path = Path.Combine(wwwRootPath + "/Image/", fileName);
                using (var fileStream = new FileStream(path, FileMode.Create))
                {
                    await petPhotoModel.ImageFile.CopyToAsync(fileStream);
                }
                //GetLoggedInUser() gets the current user by id from the db context
                GetLoggedInUser().Uploads.Add(petPhotoModel);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            return View(petPhotoModel);
        }
...
 public class PetPhotoModel
    {
        private DateTime _dateUploaded = DateTime.Now;

        public int Id { get; set; }

        [Required]
        public string PetName { get; set; }

        [Required]
        public string Title { get; set; }

        public string Description { get; set; }

        [Column(TypeName = "nvarchar(100)")]
        [DisplayName("Image Name")]
        public string ImageName { get; set; }

        [NotMapped]
        [DisplayName("Upload File")]
        public IFormFile ImageFile { get; set; }

        public DateTime DateUploaded
        {
            get { return _dateUploaded; }
            set { _dateUploaded = value; }
        }
...
 <form asp-action="UploadPhoto" enctype="multipart/form-data" method="post">