【问题标题】:Upload control gets returned null when edit编辑时上传控件返回 null
【发布时间】:2020-01-13 08:45:22
【问题描述】:

我正在尝试创建一个 crud 应用程序,但每当我尝试在编辑模式下上传时,它都会返回 null。好吧,我不是第一次上传相同的文件,但我仅在编辑模式下上传。我首先上传两个文件,一个文件,另一个文件当时为空,另一个文件只会在编辑时上传模式,在那个时候第一个文件将是不可编辑的

public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            FileDetails fileDetails = db.FileUpload.Find(id);
            if (fileDetails == null)
            {
                return HttpNotFound();
            }
            return View(fileDetails);
        }


        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit( FileDetails fileDetails)
        {
            if (ModelState.IsValid)
            {
                string uploadedfilename = Path.GetFileName(fileDetails.fileaftertourupload.FileName);
                if (!string.IsNullOrEmpty(uploadedfilename))
                {
                    string filenamewithoutextension = Path.GetFileNameWithoutExtension(fileDetails.fileaftertourupload.FileName);
                    string extension = Path.GetExtension(fileDetails.fileaftertourupload.FileName);
                    string filename = filenamewithoutextension + DateTime.Now.ToString("yymmssfff") + extension;
                    fileDetails.FileAfterTourName = filename;
                    fileDetails.FileAfterTour = "~/Content/Files/" + filename;
                    filename = Path.Combine(Server.MapPath("~/Content/Files"), filename);
                    fileDetails.fileaftertourupload.SaveAs(filename);

                    db.Entry(fileDetails).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
            }
            return View(fileDetails);
        }
@model OnlineStationaryRegister.Models.FileDetails

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>


@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>FileDetails</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.FileId)

        <div class="form-group">
            @Html.LabelFor(model => model.Officername, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Officername, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Officername, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Designation, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Designation, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Designation, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.FileBeforeTour, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <a href="~/Content/Files/@Model.FileBeforeTourName" target="_blank">View File</a>

            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.FileAfterTour, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
              <input type="file" name="fileaftertourupload" />
            </div>
        </div>



        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace OnlineStationaryRegister.Models
{
    public class FileDetails
    {
        [Key]
        public int FileId { get; set; }
        public string Officername { get; set; }
        public string Designation { get; set; }
        public string FileBeforeTour { get; set; }
        public string FileAfterTour { get; set; }
        public string FileBeforeTourName { get; set; }
        public string FileAfterTourName { get; set; }
        public int  status { get; set; } = 1;
        [NotMapped]
        public HttpPostedFileBase filebeforetourupload { get; set; }
        [NotMapped]
        public HttpPostedFileBase fileaftertourupload { get; set; }
    }
}

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    首先要上传图片,你应该在 beginform 中添加 enctype 属性。

    @using (Html.BeginForm("FileUpload", "Home", FormMethod.Post, 
                   new { enctype = "multipart/form-data" }))
    

    接下来如果通过 multipart 发送多张图片,你应该得到字节 HttpContext.Current.Request.Files 在行动中。

    Sample Code Upload Image by using asp.net mvc

    How to Upload Image Via WebApi

    【讨论】:

    • 谢谢它的工作,但由于这个我又遇到一个问题,以前上传的文件变成空白,为什么?
    • 不必在模型中添加两​​个名为 filebeforetourupload 和 fileaftertourupload 的属性。您可以通过 HttpContext 获取图像如上所述。或者您可以在获取图像的参数操作中使用 IEnumerable 。请参阅此链接:stackoverflow.com/questions/35017713/…
    • 我明白你兄弟,但为什么会出现这个问题,你能告诉我,当我去编辑并点击按钮更新时,为什么它会使预上传的一个空白
    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 2014-01-02
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多