asp.net - IFormFile 上传图像 ASP.NET core MVC 始终显示空值

标签 asp.net asp.net-mvc asp.net-core

所以我正在建立一个网站,当用户可以上传他的横幅图像作为横幅个人资料时,我想在其中实现添加横幅表单。

这就是我提出的问题,当我运行代码时,它总是返回 null。

这是我的 Controller :

[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");

        } 

这是我的 View 模型:

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; }
    }
}

这是我的 View 文件:

<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">
 ....

关于asp.net - IFormFile 上传图像 ASP.NET core MVC 始终显示空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71359898/

相关文章:

asp.net - 何时在XmlDocument或XmlTextReader上使用XPath?

javascript - 如何在 ASP.NET MVC 中组织外部 JavaScript 文件

c# - 枚举标志的模型绑定(bind)列表

CSS 加载但在 MVC 4 IIS 10 中无法正常工作

javascript - 通过 AJAX 将 JSON 对象发布到 ASP.NET Core Web API

asp.net-core - ASP.NET Core 1.0 是否支持 ApiExplorer,如何使用它?

c# - .Net 核心 : nvalidOperationException: An attempt was made to use the context while it is being configured

javascript - 使用 Eval 显示 chop 的字符串

asp.net - 将用户 ID 存储在 session 变量中

asp.net - 在 MVC 3 + Entity Framework 中创建 WebForms 应用程序