【问题标题】:Additional request are sending after first request upload file using xhr ajax with formData使用 xhr ajax 和 formData 第一次请求上传文件后发送附加请求
【发布时间】:2015-11-03 15:29:49
【问题描述】:

我花了很多时间尝试在本地主机上模拟这个错误,但没有成功。这个错误发生在实时版本的 web 上。从网络的实时版本发送错误电子邮件。

这是错误

The parameters dictionary contains a null entry for parameter 'isJsonResponse' of non-nullable type 'System.Boolean' for method 'System.Web.Mvc.ActionResult UploadFileDocument(Model, Boolean)' in Controller'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

这里是javascript:

 $('#uploadFile').click(function () {            

        var input = $('#file')[0];

        if (input.files.length == 0) return;

        $(".titleRed", $('#files')).remove();

        var dObject = new Object();
        dObject.TypeID = $('#types').val();
        dObject.FileName = input.files[0].name;
        dObject.File = input.files[0];
        dObject.ID = '@HttpUtility.JavaScriptStringEncode(Model.ID)';

        var formData = new FormData();
        for (var key in dObject) {
            formData.append(key, dObject[key]);
        }

        formData.append('isJsonResponse', false);
        uploadFiles(formData, function (result) {

            if (typeof result == 'object') {
                console.log(result.msg);
            } else {
                $('#files').append(result);
                $('#fileAlert').remove();
            }



        });
            document.getElementById('file').value = '';
            $('#types').val('1');

        return false;
    });

函数上传文件:

function uploadFiles(formData, updateCallback,progressCallback,startCallback,errorCallback) {

    var xhr = new XMLHttpRequest();
    xhr.open('POST', _uploadFilesURL);


    //listner on progress (%) for progress bar
    xhr.upload.addEventListener("progress", function (evt) {
        if (evt.lengthComputable) {
            if (typeof progressCallback != "undefined") {

                //count %
                var percentComplete = evt.loaded / evt.total;
                percentComplete = parseInt(percentComplete * 100);
                debugLog(percentComplete);
                progressCallback(percentComplete, this.progressId);
            }
        }
    }, false);

    // when downloading start create unique ID for progress bar
    xhr.upload.addEventListener("loadstart", function (e) {
        if (typeof startCallback != "undefined") {
            // generating uniqe ID (GUID)
            this.progressId = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8; return v.toString(16); });
            startCallback(this.progressId);
        }
    });

    //callback on final result of request
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            var data = null;

            //if crash JSON.Parse then is possible that result is pure text(partialView)
            try {
                data = JSON.parse(xhr.responseText);                    

            } catch (e) {

            }
            if (data == null) {                  
                //supose it is pure text if json parse crash
                updateCallback(xhr.responseText);
            } else {
                updateCallback(data.result);
            }

        } else if (xhr.readyState == 4 && xhr.status != 200) {
            if (typeof errorCallback != "undefined") {
                errorCallback(xhr);
            }
        }
    }

    xhr.send(formData);

}

这是Asp net MVC方法代码:

     [HttpPost]
public ActionResult UploadFile(Model mode, bool isJsonResponse)
    {

型号:

 public class Model
{      
    public string FileName { get; set; }      
    public int TypeID { get; set; }
    public int? ModelID { get; set; }

    public HttpPostedFileBase File { get; set; }
    public int ID { get; set; }

}

文件正常上传。但在那之后,有时会发送另一个请求,但没有 fileBody 和其他参数,如 isJsonResponse。该帖子仅包含 TypeID 和 FileName。

错误来自 IE,FF,Chrome

有人有这方面的经验吗?或者类似的东西

【问题讨论】:

    标签: javascript asp.net ajax asp.net-mvc file-upload


    【解决方案1】:

    好的,所以在应用程序笨拙的另一次测试之后,我终于模拟了行为。当互联网连接不稳定时,我会发布它。

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2015-11-06
      • 2016-04-21
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2019-05-23
      • 2022-10-17
      相关资源
      最近更新 更多