不使用表单将文件传递给控制器​​,

时间:2015-07-05 06:27:18

标签: javascript jquery ajax file asp.net-mvc-4

我试图将文件从视图加载到控制器而不使用表单,而浏览文件时应该使用Ajax将文件加载到控制器,是否可能?

        <td>Import Excell file:</td>                                
        <td><input type="file" id="fileUpload" name="fileUpload" /></td>



$('#fileUpload').die().live("change", function (e) {
        e.preventDefault();
        var file_name = $("#fileUpload").val();
        var fileName = $("#fileUpload").val();
        var fileExtension = fileName.substring(fileName.lastIndexOf('.') + 1);     
        var file_data = $("#fileUpload").prop("files")[0];



        var form_data = new FormData();
        form_data.append("file", file_data);
        alert("hahaha");
        $.ajax({
            type: 'POST',     
            url: '@Url.Action("ImportExcell","Uploadfile")',
            data: form_data,
            contentType: false,
            enctype: 'multipart/form-data',
            processData: false,
            success: function (response) {
                alert(response);
            }
        });
    });

1 个答案:

答案 0 :(得分:5)

以下是使用FormData的解决方案。这个解决方案的一个警告是FormData支持仅在现代浏览器中可用,所以不要指望这适用于IE7-9等旧浏览器。

以下列方式创建控制器操作 -

public JsonResult GetFormData(HttpPostedFileBase file, string Name)
{
    return Json(true);
}

然后你的HTML将是 -

<script src="~/Scripts/jquery-1.10.2.min.js"></script>

<script>
    $(function () {
        $("#btnSubmit").click(function () {
            $.ajax({
                url: "/Home/GetFormData",
                type: "POST",
                data: function () {
                    var data = new FormData();
                    data.append("name", jQuery("#name").val());
                    data.append("file", jQuery("#file").get(0).files[0]);
                    return data;
                }(),
                contentType: false,
                processData: false,
                success: function (response) {                        
                },
                error: function (jqXHR, textStatus, errorMessage) {
                    console.log(errorMessage);
                }
            });
        });
    });
</script>    

Name : <input type="text" id="name" /> <br />
File: <input type="file" id="file" /> <br />
<input type="button" value="Click" id="btnSubmit" />

呈现视图并输入某些信息时 -

enter image description here

单击按钮时,输出将为 -

enter image description here