无需表单提交即可上传文件,并使用jQuery和ASP.NET MVC异步上传

时间:2019-05-18 04:19:50

标签: c# jquery asp.net-mvc-4

Upload-Debugging Master Page JQuery Reference

我在asp.net mvc视图页面中有一个输入文件控件,如下所示。我试图在不使用表单的情况下并借助jQuery ajax将视图中的文件加载到控制器。

我在查看页面中没有使用任何 iframe / FORM 。文件数据未发布到Controller。

System.Web.HttpContext.Current.Request.Files.Count -始终显示为零。 和 $(“#AttachmenteUploadFile”)。get(0).files 在部署到舞台环境中后也显示“未定义”。 我在HTML / JQuery / C#中做错了什么。

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <table id="tableView" border="0">
        <tr>
            <td style="text-align:right;color:black">                   
                <%=LabelHelper.Label("lblFile", "Supplier", "File", Model.User.CultureCode)%>
            </td>
            <td style="text-align:left">
                <input type="file" id="AttachmenteUploadFile" />
                <input type="button" id="btnUploadSubmit" value="Attach Document" />
            </td>
        </tr>             
    </table>
</div>   
</asp:Content>

这是JQuery按钮的Onclick事件。

$("#btnUploadSubmit").click(function() {
    if (RequiredFieldValidate() != false) {     
    var fileData = new FormData();
    var files = $("#AttachmenteUploadFile").get(0).files;    
    if (FileSizeValidation(filesize) != false) 
    {
        for (var i = 0; i < files.length; i++) {
        fileData.append(files[i].name, files[i]);
    }        
    fileData.append('documentType', $('#ddlDocumentType').val());
    var AttachTypeCode = $('#ddlDocumentType').val();
    $.ajax({
        type: "POST",
        url: getExactPath('/Upload/UploadDocument'),
        data: fileData,
        dataType: 'Json',
        processData: false,
        contentType: false,
        success: function(jsonData) {
            var jsonobj = $.parseJSON(jsonData);
            FillGrid(jsonobj);
        },
        error: function() {
            alert("Unable to upload the Document.");
        }});}}});});

JQuery调用中的Controller ActionResult。

[HttpPost]
public ActionResult UploadDocument() 
{     
    List < string > mimeType = DocumentumUtil.getMimeTypes();
    if (System.Web.HttpContext.Current.Request.Files.Count > 0)
    {          
        docFullPath = System.Web.HttpContext.Current.Request.Files[0].FileName;
       docFullName = System.Web.HttpContext.Current.Request.Files.AllKeys[0];
       int index = docFullName.LastIndexOf('.');
       docname = docFullName.Substring(0, docFullName.LastIndexOf('.'));
       docExt = docFullName.Substring(index + 1);  
    }  
} catch {
}
return Json(AttachmentDetails, JsonRequestBehavior.AllowGet);
}

请有人帮忙。我被困住了。预先感谢。

更新: 客户端方面的问题已解决,因为FormData在IE(文档模式7)中不起作用,所以我已更改为更高版本。但仍然 System.Web.HttpContext.Current.Request.Files.Count 我仍为零

2 个答案:

答案 0 :(得分:1)

在您的表单中添加此属性。 enctype =“ multipart / form-data”

并确保输入文件名称与“操作方法的参数”或“类的属性”相同

答案 1 :(得分:0)

在设计中放置Name属性。

<input type="file" id="AttachmenteUploadFile" name="FileUpload_"/>

并检查一次。