Asp .net Core MVC - файл с несколькими входами в списке - PullRequest
0 голосов
/ 27 июня 2018

Работая на веб-сайте MVC ASP .net, когда я пытаюсь загрузить файлы с несколькими входами, Iformfile всегда имеет значение null:
Форма:

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

Но это не работает лучше, модель. PS: мне нужно иметь несколько входов, а не один вход с несколькими файлами.

РЕДАКТИРОВАТЬ:

Работа:

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

Но мне не удалось сделать это в foreach с obj.ObjectType.ObjectTypeID в качестве ключа

1 Ответ

0 голосов
/ 28 июня 2018

Я не понял, как решить эту проблему, поэтому я сделал обходной путь: 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);
        }
    })

ViewModel:

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