【问题标题】:Dotnet Core 3 MVC Is it possible to set the input to a fileDotnet Core 3 MVC是否可以将输入设置为文件
【发布时间】:2020-07-27 08:08:15
【问题描述】:

我正在尝试创建一个允许用户将文档动态添加到模型的页面。我正在使用部分视图执行此操作,该视图通过 ajax 调用,然后在页面上呈现:

<h4>Property</h4>
<hr />
<div class="row">
    <div class="col-md-8">
        <form asp-action="CreateProperty" enctype="multipart/form-data" id="propertyCreateForm" method="post", name="propertyDocument">
            <div class="form-group" id="propertyDocumentsContainer">
                @Html.EditorFor(item => item.Documents)
            </div>
            <div class="row">
                <input type="button" class="btn btn-secondary" id="btnAdd" value="Add Document">
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}

    <script type="text/javascript">
        $('#btnAdd').on('click', function () {
            var form = $('#propertyCreateForm')[0];
            var formData = new FormData(form);

            $.ajax({
                async: true,
                data: formData,
                processData: false,
                contentType: false,
                type: "POST",
                url: "/Property/AddPropertyDocument",
                success: function(partialView){
                    console.log("Partial View: " + partialView),
                    $('#propertyDocumentsContainer').html(partialView)
                }, error: function(err){
                    console.error(err.error);
                }
            });
        });
    </script>
}

局部视图如下:

    <div class="row">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="Document"></label>
        <input asp-for="Document" class="form-control" type="file"/>
        <span asp-validation-for="Document" class="text-danger"></span>
    </div>
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <label asp-for="DocumentType"></label>
                <select asp-for="DocumentType.Id" asp-items="@ViewBag.DocumentTypes" class="form-control"></select>
                <span asp-validation-for="DocumentType" class="text-danger"></span>

            </div>
        </div>
        <div class="col-md-6">

            <div class="form-group">
                <label asp-for="ExpiryDate"></label>
                <input asp-for="ExpiryDate" class="form-control" />
                <span asp-validation-for="ExpiryDate" class="text-danger"></span>
            </div>
        </div>
    </div>
</div>

一切正常,除了在返回数据时它没有留下文档。我可以将输入设置为文件吗?我的示例中的 Document 属性是一个 IFormFile

【问题讨论】:

  • 您没有显示&lt;form&gt; 标签。它在某个地方吗?如果有,它是否具有必需的属性enctype="multipart/form-data"?请edit问题并包含它。
  • 嗨,我已经更新了问题以包括 form 和 enc 类型。文件正在进入部分视图,只是当它返回时它没有加载选定的文件。
  • 这是我的完整数据的 git hub 存储库:github.com/marcusstockton/DotnetMVCPropertyManager

标签: model-view-controller razor .net-core


【解决方案1】:

我最终只是添加了一个新字段,而不是替换 ajax 调用的全部内容,从而消除了在部分视图中传递 IFormFile 的需要

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多