IFormFile 上传图像 ASP.NET 核心 MVC 始终显示空值
IFormFile Upload Image ASP.NET core MVC Is showing null value always
所以我正在构建一个网站,我想在用户可以上传他的横幅图片作为横幅配置文件时实现添加横幅表单。
这就是我提出的问题,当我 运行 代码时,它 return 始终为 null。
这是我的控制器:
[HttpPost]
public async Task<ActionResult> AddBannerDataAsync(BannerViewModels abd)
{
if (ModelState.IsValid)
{
string uniqueFileName = null;
if (abd.BannerImg1 != null)
{
string uploadsFolder = Path.Combine(WebHostEnvironment.WebRootPath, "Images");
uniqueFileName = Guid.NewGuid().ToString() + "_" + abd.BannerImg1.FileName;
using (var fs = new FileStream(Path.Combine(uploadsFolder, uniqueFileName), FileMode.Create))
{
await abd.BannerImg1.CopyToAsync(fs);
}
}
Banner bnr = new Banner
{
BannerTitle = abd.BannerTitle,
BannerDescription = abd.BannerDescription,
//BannerImg = abd.BannerImg,
//BannerImg = uniqueFileName,
BannerUrl = abd.BannerUrl,
BannerIndex = abd.BannerIndex
};
_db.Banner.Add(bnr);
_db.SaveChanges();
}
return Redirect("addbanner");
}
这是我的视图模型:
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using SZGMC.Web.Models;
namespace SZGMC.Web.Areas.Admin.ViewModels
{
public class BannerViewModels
{
public int BannerId { get; set; }
public string BannerTitle { get; set; }
public string BannerDescription { get; set; }
public string BannerImg { get; set; }
public IFormFile BannerImg1 { get; set; }
public string BannerUrl { get; set; }
public string BannerIndex { get; set; }
public int? BMasterId { get; set; }
public byte? IsDeleted { get; set; }
public virtual BannerMaster BMaster { get; set; }
}
}
这是我的视图文件:
<form asp-controller="Home" asp-action="AddBannerData" method="post" autocomplete="off">
<div id="main-content">
<div class="container-fluid">
<!-- Page header section -->
<div class="block-header">
<div class="row clearfix">
<div class="col-lg-6 col-md-5 col-sm-12">
<h1>Hi, Welcomeback!</h1>
<span>You can add banner here</span>
</div>
<div class="col-xl-6 col-md-7 col-sm-12 text-md-right">
<div class="d-flex align-items-center justify-content-md-end mt-4 mt-md-0 flex-wrap vivify pullUp delay-550">
<div class="mb-3 mb-xl-0 ">
@*<a href="setting.html" class="btn btn-default">Settings</a>*@
<a asp-action="BannerDetails" class="btn btn-dark">Banner List</a>
</div>
</div>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-12">
<div class="card">
<div class="body">
<div class="header">
<h2><strong>Enter Banner Details</strong></h2>
</div>
<br />
<div class="row">
<div class="col-12">
<div class="form-group c_form_group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"></span>
</div>
<input type="text" class="form-control" asp-for="BannerTitle" placeholder="Banner Title" aria-label="bannertitle" aria-describedby="basic-addon1">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group c_form_group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"></span>
</div>
<input type="text" class="form-control" asp-for="BannerUrl" placeholder="Banner Url" aria-label="bannerurl" aria-describedby="basic-addon1">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="form-group c_form_group">
<label>Banner Description</label>
<div class="input-group">
<textarea class="form-control" asp-for="BannerDescription" aria-label="Banner Description" rows="6"></textarea>
</div>
</div>
</div>
<div class="col-6">
<div class="drop-zone">
<span class="drop-zone__prompt">Drop file here or click to upload</span>
<input type="file" asp-for="BannerImg1" name="BannerImg1" class="drop-zone__input" accept="image/*" data-allowed-file-extensions='["jpg", "png" , "jpeg"]' required>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="form-group c_form_group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"></span>
</div>
<input type="text" class="form-control" asp-for="BannerIndex" placeholder="Banner Index" aria-label="bannerindex" aria-describedby="basic-addon1">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group c_form_group">
@Html.DropDownListFor(x => x.BMasterId, ViewBag.MasterBanner as SelectList, "Choose Banner Type", new { @class = "form-control" })
</div>
</div>
</div>
<div class="mb-2" align="center">
<button type="submit" class="btn btn-success btn-round">Add Banner</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
当我尝试在浏览器中上传 img 时,它没有抛出任何异常,它只是没有将图像上传到数据库并且该列为 NULL。
提前感谢大家的帮助或建议。
您必须在表单标签上使用 enctype="multipart/form-data"
属性。
<form asp-controller="Home" asp-action="AddBannerData" method="post" autocomplete="off" enctype="multipart/form-data">
<div id="main-content">
....
所以我正在构建一个网站,我想在用户可以上传他的横幅图片作为横幅配置文件时实现添加横幅表单。
这就是我提出的问题,当我 运行 代码时,它 return 始终为 null。
这是我的控制器:
[HttpPost]
public async Task<ActionResult> AddBannerDataAsync(BannerViewModels abd)
{
if (ModelState.IsValid)
{
string uniqueFileName = null;
if (abd.BannerImg1 != null)
{
string uploadsFolder = Path.Combine(WebHostEnvironment.WebRootPath, "Images");
uniqueFileName = Guid.NewGuid().ToString() + "_" + abd.BannerImg1.FileName;
using (var fs = new FileStream(Path.Combine(uploadsFolder, uniqueFileName), FileMode.Create))
{
await abd.BannerImg1.CopyToAsync(fs);
}
}
Banner bnr = new Banner
{
BannerTitle = abd.BannerTitle,
BannerDescription = abd.BannerDescription,
//BannerImg = abd.BannerImg,
//BannerImg = uniqueFileName,
BannerUrl = abd.BannerUrl,
BannerIndex = abd.BannerIndex
};
_db.Banner.Add(bnr);
_db.SaveChanges();
}
return Redirect("addbanner");
}
这是我的视图模型:
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using SZGMC.Web.Models;
namespace SZGMC.Web.Areas.Admin.ViewModels
{
public class BannerViewModels
{
public int BannerId { get; set; }
public string BannerTitle { get; set; }
public string BannerDescription { get; set; }
public string BannerImg { get; set; }
public IFormFile BannerImg1 { get; set; }
public string BannerUrl { get; set; }
public string BannerIndex { get; set; }
public int? BMasterId { get; set; }
public byte? IsDeleted { get; set; }
public virtual BannerMaster BMaster { get; set; }
}
}
这是我的视图文件:
<form asp-controller="Home" asp-action="AddBannerData" method="post" autocomplete="off">
<div id="main-content">
<div class="container-fluid">
<!-- Page header section -->
<div class="block-header">
<div class="row clearfix">
<div class="col-lg-6 col-md-5 col-sm-12">
<h1>Hi, Welcomeback!</h1>
<span>You can add banner here</span>
</div>
<div class="col-xl-6 col-md-7 col-sm-12 text-md-right">
<div class="d-flex align-items-center justify-content-md-end mt-4 mt-md-0 flex-wrap vivify pullUp delay-550">
<div class="mb-3 mb-xl-0 ">
@*<a href="setting.html" class="btn btn-default">Settings</a>*@
<a asp-action="BannerDetails" class="btn btn-dark">Banner List</a>
</div>
</div>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-12">
<div class="card">
<div class="body">
<div class="header">
<h2><strong>Enter Banner Details</strong></h2>
</div>
<br />
<div class="row">
<div class="col-12">
<div class="form-group c_form_group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"></span>
</div>
<input type="text" class="form-control" asp-for="BannerTitle" placeholder="Banner Title" aria-label="bannertitle" aria-describedby="basic-addon1">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group c_form_group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"></span>
</div>
<input type="text" class="form-control" asp-for="BannerUrl" placeholder="Banner Url" aria-label="bannerurl" aria-describedby="basic-addon1">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="form-group c_form_group">
<label>Banner Description</label>
<div class="input-group">
<textarea class="form-control" asp-for="BannerDescription" aria-label="Banner Description" rows="6"></textarea>
</div>
</div>
</div>
<div class="col-6">
<div class="drop-zone">
<span class="drop-zone__prompt">Drop file here or click to upload</span>
<input type="file" asp-for="BannerImg1" name="BannerImg1" class="drop-zone__input" accept="image/*" data-allowed-file-extensions='["jpg", "png" , "jpeg"]' required>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="form-group c_form_group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"></span>
</div>
<input type="text" class="form-control" asp-for="BannerIndex" placeholder="Banner Index" aria-label="bannerindex" aria-describedby="basic-addon1">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group c_form_group">
@Html.DropDownListFor(x => x.BMasterId, ViewBag.MasterBanner as SelectList, "Choose Banner Type", new { @class = "form-control" })
</div>
</div>
</div>
<div class="mb-2" align="center">
<button type="submit" class="btn btn-success btn-round">Add Banner</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
当我尝试在浏览器中上传 img 时,它没有抛出任何异常,它只是没有将图像上传到数据库并且该列为 NULL。
提前感谢大家的帮助或建议。
您必须在表单标签上使用 enctype="multipart/form-data"
属性。
<form asp-controller="Home" asp-action="AddBannerData" method="post" autocomplete="off" enctype="multipart/form-data">
<div id="main-content">
....