首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IFormFile属性在通过ajax发布时获得空值(已经使用了enctype="multipart/form-data")

IFormFile属性在通过ajax发布时获得空值(已经使用了enctype="multipart/form-data")
EN

Stack Overflow用户
提问于 2019-12-16 07:56:35
回答 2查看 309关注 0票数 0

我是通过ajax提交表单的,但是"fileUpload“属性总是获得一个空值,我也尝试过在表单标记中包含enctype="multipart/ form -data”,但它仍然是相同的。也尝试了不同的答案,在其他问题上回答相同的主题,但没有任何效果。

HTML代码

代码语言:javascript
运行
复制
<form method="post" class="form-horizontal offset-md-2 " role="form" id="grnUploadForm" enctype="multipart/form-data">
    <input type="hidden" asp-for="GrnVehicleUploadModel.GrnVehicleUploadProcessType" id="grnVehicleUploadProcessType" />
    <div class="row">
        <div class="col-md-3">
            <div class="form-group">
                <label asp-for="GrnVehicleUploadModel.UploadDate" for="uploadDate">Upload Date<span class="text-danger">*</span></label>
                <input type="date" asp-for="GrnVehicleUploadModel.UploadDate" class="form-control  form-control-sm shadow" id="uploadDate" required />
            </div>
        </div>

        <div class="col-md-3">
            <div class="form-group">
                <label asp-for="GrnVehicleUploadModel.DealerRid" for="dealerRid">Dealer <span class="text-danger">*</span></label>
                <select asp-for="GrnVehicleUploadModel.DealerRid" asp-items="@(new SelectList(Model.Dealers,"DealerRid","DealerName"))" class="selectpicker form-control  form-control-sm  shadow" data-live-search="true" data-size="5" id="dealerRid"></select>
            </div>
        </div>

        <div class="col-md-3">
            <div class="form-group">
                <label asp-for="GrnVehicleUploadModel.BaseLocationRid" for="baseLocationRid">Location <span class="text-danger">*</span></label>
                <select asp-for="GrnVehicleUploadModel.BaseLocationRid" asp-items="@(new SelectList(Model.Locations,"LocationRid","LocationName"))" class="selectpicker form-control  form-control-sm  shadow" data-live-search="true" data-size="5" id="baseLocationRid"></select>
            </div>
        </div>


    </div>
        <div class="row " id="grn2Process">
            <div class="col-md-3">
                <div class="form-group">
                    <label asp-for="GrnVehicleUploadModel.InvoiceNumber" for="invoiceNumber">Invoice Number <span class="text-danger">*</span></label>
                    <input asp-for="GrnVehicleUploadModel.InvoiceNumber" class="form-control  form-control-sm shadow" id="invoiceNumber" required />
                </div>
            </div>
            <div class="col-md-3">
                <div class="form-group">
                    <label asp-for="GrnVehicleUploadModel.InvoiceDate" for="invoiceDate">Invoice Date <span class="text-danger">*</span></label>
                    <input type="date" asp-for="GrnVehicleUploadModel.InvoiceDate" class="form-control  form-control-sm shadow" id="invoiceDate" required />
                </div>
            </div>
            <div class="col-md-3">
                <div class="form-group">
                    <label asp-for="GrnVehicleUploadModel.ReceiptDate" for="receiptDate">Receipt Date <span class="text-danger">*</span></label>
                    <input type="date" asp-for="GrnVehicleUploadModel.ReceiptDate" class="form-control  form-control-sm shadow" id="receiptDate" required />
                </div>
            </div>
        </div>
    <div class="row">
        <div class='col-md-9'>
            <label for='fileUpload'>Choose Document</label>
            <label class='custom-file-label mt-4 text-muted text-wrap'>Document Name</label>
            <input asp-for="fileUpload" type='file' class='custom-file-input' onchange="fnlabelFileName();" id='fileUpload' required/>

        </div>
    </div>
    <br />
    <div class="row">
        <div class="col-md-10 text-center">
            <div class="form-group">
                <button class="btn btn-sm btn-outline-success shadow" type="submit">Save</button>
                <button onclick="window.history.back()" class="btn btn-sm btn-outline-dark shadow">Cancel</button>
            </div>
        </div>
    </div>
</form>

JS

代码语言:javascript
运行
复制
<script>

    var formId = $('#grnUploadForm');
    $(formId).on('submit', function (e) {
        $.ajax({
            url: 'FileUploadProcess',
            type: 'POST',
            data: $(formId).serializeArray(),
            success: function (response) {
                if (response.success) {
                    enablepopupModal('Successful', 'Success');
                }
                else {
                    enablepopupModal('Invalid Input', 'Warning');

                }
            },
            error: function (response) {
                enablepopupModal("Ajax Error", "Server not responding", settings = { type: 'error', modalId: 'ajaxError' });
            },
        });
        e.preventDefault();
    });



    function fnlabelFileName() {
        var fileName = $(".custom-file-input").val().split("\\").pop();
        $(".custom-file-input").siblings(".custom-file-label").addClass("selected").html(fileName);

    }
</script>

ActionMethod (控制器):这里我得到了null值viewModel.fileUpload = null

代码语言:javascript
运行
复制
public JsonResult FileUploadProcess(GrnVehicleUploadViewModel viewModel)
        {
            //viewModel.fileUpload getting null
            var model = viewModel.GrnVehicleUploadModel;
            var errors = Validate(model);
            if (string.IsNullOrEmpty(errors))
                _jsonResponse.IsSuccess = true;
            else
                _jsonResponse.IsSuccess = false;

            return Json(new
            {
                success = _jsonResponse.IsSuccess
            });
        }

ViewModel

代码语言:javascript
运行
复制
 public class GrnVehicleUploadViewModel
    {
        public GrnVehicleUploadViewModel()
        {
            Dealers = new List<DealerModel>();
            Locations = new List<LocationModel>();
            GrnVehicleUploadModel = new GrnVehicleUploadModel();
        }

        public IList<DealerModel> Dealers { get; set; }
        public IList<LocationModel> Locations { get; set; }
        public GrnVehicleUploadModel GrnVehicleUploadModel { get; set; }
        public IFormFile fileUpload { get; set; }

    }
EN

回答 2

Stack Overflow用户

发布于 2019-12-16 08:06:50

尝试在ajax选项对象中添加(contentType: false,processData: false)

示例

代码语言:javascript
运行
复制
$(formId).on('submit', function (e) {
    $.ajax({
        url: 'FileUploadProcess',
        type: 'POST',
        data: $(formId).serializeArray(),
        contentType: false,
        processData: false,
        success: function (response) {
            if (response.success) {
                enablepopupModal('Successful', 'Success');
            }
            else {
                enablepopupModal('Invalid Input', 'Warning');

            }
        },
        error: function (response) {
            enablepopupModal("Ajax Error", "Server not responding", settings = { type: 'error', modalId: 'ajaxError' });
        },
    });
    e.preventDefault();
});
票数 0
EN

Stack Overflow用户

发布于 2019-12-16 10:39:35

我在Using ajax to post a view model which includes an IFormFile property in MVC Core上找到了答案

获得null的原因: Jquery serializeArray()不考虑文件输入使用FormData (请参阅上面的链接)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59352479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档