【问题标题】:HttpPostedFileBase null when I try to upload image in asp .net mvc5 with js knockout?当我尝试使用 js 敲除在 asp .net mvc5 中上传图像时,HttpPostedFileBase null?
【发布时间】:2019-07-17 13:21:20
【问题描述】:

我正在尝试使用淘汰赛 js 在 asp .net mvc 5 中上传图片,而 HttpPostedFileBase 类型的 paraFrame PhotoFile 对我来说是空的,我无法上传图片,我是新使用淘汰赛 js 我希望有人能帮我解决这个问题,

这是模型,

    public int LenderId { get; set; }
    public string GenderId { get; set; }
    public string GenderName { get; set; }
    public string Email { get; set; }
    public bool IsActive { get; set; }
    public string PhotoPath { get; set; }
    public HttpPostedFileBase PhotoFile { get; set; }

这是html,

        <div class="form-group">
            <span class="control-label col-md-2"><strong>Foto:</strong></span>
            <div class="col-md-10">
                <span class="btn btn-default btn-file">
                    <input type="file" class="form-control" id="PhotoUpload" name="PhotoUpload" data-bind="attr:{src: PhotoPath}" />
                </span>
            </div>
        </div>

这是js

函数贷方模型(){ var 贷款人模型 = 这个;

lenderModel.LenderId = ko.observable();
lenderModel.FirstName = ko.observable();
lenderModel.MiddleName = ko.observable();
lenderModel.FirstLastName = ko.observable();
lenderModel.SecondLastName = ko.observable();
lenderModel.IdentificationCard = ko.observable();
lenderModel.GenderId = ko.observable();
lenderModel.GenderName = ko.observable();
lenderModel.Email = ko.observable();
lenderModel.IsActive = ko.observable();
lenderModel.PhotoPath = ko.observable();
lenderModel.CreateBy = ko.observable();
lenderModel.CreationDate = ko.observable();
lenderModel.ModifiedBy = ko.observable();
lenderModel.ModifiedDate = ko.observable();

}

lenderViewModel.Create = function () {
    if (lenderViewModel.IsNew()) {
        $.ajax({
            url: '/AdminLenders/Create',
            data: ko.toJSON(lenderViewModel.LenderModel()),
            dataType: "json",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            async: true,
            success: function (data) {
                if (data.Success) {
                    LoadGenders();
                    LoadListLenders();
                    $('#TextboxFirstName').val('');
                    $('#TextboxMiddleName').val('');
                    $('#TextboxFirstLastName').val('');
                    $('#TextboxSecondLastName').val('');
                    $('#TextboxIdentificationCard').val('');
                    $('#TextboxEmail').val('');
                    $('#ComboBoxGenders').val('');
                    $('#TextboxIsActive').prop('checked', false);
                    swal("Prestamista creado!", "Se ha registrado correctamente!", "success")
                }
                else {
                    swal("Error creando el prestamista!", data.Data, "error")
                }
            },
            error: function (ex) {
                alert('Ocurrión un error');
            }
        });
    }
};

由于我是淘汰 js 的新手,我不知道如何实现它,感谢您的贡献和帮助

【问题讨论】:

    标签: javascript asp.net-mvc knockout.js asp.net-ajax


    【解决方案1】:

    我猜测了控制器上的 Create 方法是什么样子,并使用 FormData 对象想出了这个。

    lenderViewModel.Create = function () {
        if (lenderViewModel.IsNew()) {
                var lender = lenderViewModel.LenderModel();    
    
            var lenderData = new FormData();
    
            // Build up a matching Lender
            lenderData.append("LenderId", lender.LenderId());
            lenderData.append("GenderId", lender.GenderId());
            lenderData.append("GenderName", lender.GenderName());
            lenderData.append("Email", lender.Email());
            lenderData.append("IsActive", lender.IsActive());
            lenderData.append("PhotoPath", lender.PhotoPath());
    
                // Get the file and add it to the Lender
            var fileUpload = $("#PhotoUpload").get(0);
            var files = fileUpload.files;
            if(files.length === 1) {
                 lenderData.append("PhotoFile", files[0]);
                    }
    
            $.ajax({
                url: '/AdminLenders/Create',
                data: lenderData,
                enctype: "multipart/form-data",
                dataType: "json",
                type: "POST",
                contentType: false,
                processData: false,
                success: function (data) {
                    if (data.Success) {
                        LoadGenders();
                        LoadListLenders();
                        $('#TextboxFirstName').val('');
                        $('#TextboxMiddleName').val('');
                        $('#TextboxFirstLastName').val('');
                        $('#TextboxSecondLastName').val('');
                        $('#TextboxIdentificationCard').val('');
                        $('#TextboxEmail').val('');
                        $('#ComboBoxGenders').val('');
                        $('#TextboxIsActive').prop('checked', false);
                        swal("Prestamista creado!", "Se ha registrado correctamente!", "success")
                    }
                    else {
                        swal("Error creando el prestamista!", data.Data, "error")
                    }
                },
                error: function (ex) {
                    alert('Ocurrión un error');
                }
            });
        }
    };
    

    【讨论】:

    • 我有下一个错误,代码是 lenderViewModel.LenderId is not a function
    • 还是lenderModel.LenderId = ko.observable();吗?
    • 如果还是这样,错误显示为 Not allowed to load local resource: file:///C:/fakepath/jmv.p
    • 我更改了代码以获取对 lenderViewModel.LenderModel() 的引用来构建 FormData。
    • 我做了并验证,我得到的数据似乎给我带来的不便是 ajax
    猜你喜欢
    • 2015-10-20
    • 2021-03-13
    • 2014-07-08
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多