Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我试图使用ajax调用将上传的文件从视图发送到控制器,但该文件在控制器中被接收为null_C#_Jquery_Html_Ajax_Asp.net Mvc - Fatal编程技术网

C# 我试图使用ajax调用将上传的文件从视图发送到控制器,但该文件在控制器中被接收为null

C# 我试图使用ajax调用将上传的文件从视图发送到控制器,但该文件在控制器中被接收为null,c#,jquery,html,ajax,asp.net-mvc,C#,Jquery,Html,Ajax,Asp.net Mvc,我正在使用ajax从html视图向控制器发送一个上传的文件,但该文件在控制器中被接收为空 我尝试使用FormData,但没有任何结果,或者可能我没有正确使用它,当我使用html.BeginForm()发送文件时,它在控制器中被正确读取,但我不想使用表单,因为它在提交后会打开另一个页面 下面是我的控制器 public void Upload_SCN_CA_File(FormCollection formCollection) { if (Request != null) {

我正在使用ajax从html视图向控制器发送一个上传的文件,但该文件在控制器中被接收为空

我尝试使用FormData,但没有任何结果,或者可能我没有正确使用它,当我使用html.BeginForm()发送文件时,它在控制器中被正确读取,但我不想使用表单,因为它在提交后会打开另一个页面

下面是我的控制器

public void Upload_SCN_CA_File(FormCollection formCollection)
{
    if (Request != null)
    {
        HttpPostedFileBase file = Request.Files["UploadedFile"];
        if ((file != null) && (file.ContentLength > 0) && !string.IsNullOrEmpty(file.FileName)) 
        {
            string fileName = file.FileName;
            Debug.WriteLine(fileName);
            string fileContentType = file.ContentType;
            byte[] fileBytes = new byte[file.ContentLength];
            var data = file.InputStream.Read(fileBytes, 0, Convert.ToInt32(file.ContentLength));
        }
    }
}
下面是jQueryAjax调用

$("#upload").on("click",function () {
    $.ajax({
        type: "POST",
        url: "/Order/Upload_SCN_CA_File",
        data: {
            enctype: 'multipart/form-data'
        },
        success: function (response) {
            if (response.result == false) {
                swal("Error", response.message, "error");
            }
            else {
                swal("Success", response.message, "success");
            }
        }
    });
});
下面是我的html视图

<form>
    <div class="row">
        <div class="col">
            <input name="UploadedFile" id="upfile" type="file" />
        </div>
    </div>
    <div class="row">
        <div class="col">
            <div class="btn btn-primary rounded" id="upload" style="margin:8px">Upload</div><br>
        </div>
    </div>
</form>

上传

我希望文件能正确地发送到控制器,以便我能正确地读取它,但它被接收为null

您必须使用传递请求中的表单内容。例如,您可以在单击处理程序中收集它

const form = $(this).closest('form').get(0)
const data = new FormData(form)
然后将以下内容传递给
ajax
调用

data: data,
processData: false,
contentType: false
而不是

data: {
    enctype: 'multipart/form-data'
},
processData:false
使jquery将FormData实例未经修改地传递给XHR,这是文件上传工作所必需的<代码>内容类型:false将使浏览器自动设置
多部分/表单数据
内容类型


FormData现在在较旧的浏览器中不起作用,也就是说,您可以像下面的代码一样传递数据

   $("#form0").submit(function (event) {
        var dataString;
        event.preventDefault();
        event.stopImmediatePropagation();
        var action = $("#form0").attr("action");
        if ($("#form0").attr("enctype") == "multipart/form-data") {
            dataString = new FormData($("#form0").get(0));
            contentType = false;
            processData = false;
        } else {
            // regular form, do your own thing if you need it
        }
        $.ajax({
            type: "POST",
            url: action,
            data: dataString,
            dataType: "json",
            contentType: contentType,
            processData: processData,
            success: function (data) {

            },
            error: function (jqXHR, textStatus, errorThrown) {

            }
        });
    });

数据:{enctype:'multipart/form data'},
-您似乎没有将该文件包含在您的后可能副本中,谢谢它工作正常,但我遇到了相同的早期问题,在控制器中上载和读取该文件并将响应返回到视图中的ajax之后,局部视图消失,父视图重新加载,您有什么解决方案吗?您必须在新问题中详细描述此问题。您在此线程中没有提到任何局部视图或父视图。这里我们处理对div的单击,在这里我们只发送一个AJAX请求。这不可能单独导致某些视图消失或某些视图重新加载。