【问题标题】:Asp .net Core MVC - Multiple Inputs file in ListAsp .net Core MVC - 列表中的多个输入文件
【发布时间】:2018-06-27 13:41:56
【问题描述】:

在 ASP .net 核心 MVC 网站上工作,当我尝试上传具有多个输入的文件时,Iformfile 始终为空:
Form:

<form asp-controller="EmployeeManagement" asp-action="ConfirmObjectSubmit" enctype="multipart/form-data">
@foreach (Intranet.Models.Object obj in Model.Objects)
        {
<h4>@Localizer["Picture"]</h4>
            var fileID = "Model_LendingSheets_" + obj.ObjectType.ObjectTypeID + "_";
            var fileName = "Model.LendingSheets[" + obj.ObjectType.ObjectTypeID + "]";
            <div class="form-group">
                <div class="input-group input-file" name="file">
                    <label class="input-group-btn">
                        <span class="btn btn-primary">@Localizer["Browse"]&hellip;
                            <input type="file" style="display: none;" id="@fileID" name="@fileName">
                        </span>
                    </label>
                    <input type="text" class="form-control" placeholder='@Localizer["Choose a file..."]' id="fileName" readonly />
                    <span class="input-group-btn">
                        <button id="removeFile" class="btn btn-warning btn-reset" type="button">@Localizer["Remove"]</button>
                    </span>
                </div>
            </div>

        }
        <button id="submit" type="submit" class="input-group btn btn-default">@Localizer["Validate Form"]</button>
    </form>

型号:

public class ConfirmObject
{
    public List<Models.Object> Objects { get; set; }
    public Dictionary<int, bool> Need { get; set; }
    public Dictionary<int, String> Details { get; set; }
    public Dictionary<int, DateTime> LendingDates { get; set; }
    public Dictionary<int, IFormFile> LendingSheets { get; set; }
}  

控制器

    public IActionResult ConfirmObjectSubmit(ConfirmObject model)
    {
        return RedirectToAction("Index", "Home");
    }

我试过了:

<div class="form-group">
                <div class="input-group input-file" name="file">
                    <label class="input-group-btn">
                        <span class="btn btn-primary">
                            @Localizer["Browse"]&hellip;
                            <input type="file" style="display: none;" asp-for="LendingSheets[obj.ObjectType.ObjectTypeID]">
                        </span>
                    </label>
                    <input type="text" class="form-control" placeholder='@Localizer["Choose a file..."]' id="fileName" readonly />
                    <span class="input-group-btn">
                        <button id="removeFile" class="btn btn-warning btn-reset" type="button">@Localizer["Remove"]</button>
                    </span>
                </div>
            </div>

还有:

var fileID = "LendingSheets_" + obj.ObjectType.ObjectTypeID + "_";
            var fileName = "LendingSheets[" + obj.ObjectType.ObjectTypeID + "]";
            <div class="form-group">
                <div class="input-group input-file" name="file">
                    <label class="input-group-btn">
                        <span class="btn btn-primary">@Localizer["Browse"]&hellip;
                            <input type="file" style="display: none;" id="@fileID" name="@fileName">
                        </span>
                    </label>
                    <input type="text" class="form-control" placeholder='@Localizer["Choose a file..."]' id="fileName" readonly />
                    <span class="input-group-btn">
                        <button id="removeFile" class="btn btn-warning btn-reset" type="button">@Localizer["Remove"]</button>
                    </span>
                </div>
            </div>

但它并没有更好地工作,model.LendingSheets 保持为空。
ps:我需要多个输入,而不是一个输入多个文件。

编辑:

这项工作:

<input type="file" class="lending-sheets" asp-for='LendingSheets[22]'>
<input type="file" class="lending-sheets" asp-for='LendingSheets[39]'>

但我没有成功在以 obj.ObjectType.ObjectTypeID 为键的 foreach 中成功

【问题讨论】:

    标签: c# asp.net-mvc file-upload asp.net-core asp.net-core-mvc


    【解决方案1】:

    我不知道如何解决这个问题,所以我做了一个解决方法: 文件的 base64 被复制到 JS 中的另一个字段中:

    查看:

    <input type="file" class="lending-sheets file-input" style="display: none;" id="@obj.ObjectType.ObjectTypeID">
    <input class="form-control" style="display:none" asp-for="Base64[obj.ObjectType.ObjectTypeID]" />
    

    JS:

    $(".file-input").change(function () {
            console.log(this);
            console.log(this.files);
            var id = this.id
            console.log(id);
            var file = this.files[0];
            var reader = new FileReader();
            reader.addEventListener("load", function () {
                $("#Base64_" + id + "_").val(reader.result);
            }, false);
    
            if (file) {
                reader.readAsDataURL(file);
            }
        })
    

    视图模型:

    public class ConfirmObject
        {
            public List<Models.Object> Objects { get; set; }
            public Dictionary<int, String> Base64 { get; set; }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2017-06-12
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多