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

Posted

技术标签:

【中文标题】使用 jQuery 和 ASP.NET MVC 异步上传文件,无需表单提交和异步【英文标题】:File upload without form submit and asynchronously using jQuery and ASP.NET MVC 【发布时间】:2019-10-05 08:20:20 【问题描述】:

Upload-Debugging Master Page JQuery Reference

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

我没有在视图页面中使用任何 Iframe / FORM。文件数据未发布到控制器。

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 调用的控制器 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 我仍然是零

【问题讨论】:

你试过下面的答案吗 是的,我试过了。没有运气。我不确定这里有什么问题。 试试@Amit Sakare 的回答。 【参考方案1】:

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

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

【讨论】:

你的意思是控制器动作名和输入文件名应该一样?【参考方案2】:

在设计中放置Name 属性。

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

并检查一次。

【讨论】:

我也试过了,还是不行。当我创建新的 asp.net-mvc 项目时,我能够获取文件上传控制信息,我在我现有的 asp.net mvc 应用程序之一中使用它。此功能不起作用的地方。我是否缺少任何 JQuery 引用?我正在使用母版页,它指的是 jquery 引用。请看附件图片 这与我认为的JQuery 引用无关。 当我开始工作时,我在视图页面中提到了“cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js”和“code.jquery.com/ui/1.12.1/jquery-ui.js”,它在本地工作。但是在阶段脚本失败了。所有的开发工作都完成了,我被困在这里,然后才开始生产。

以上是关于使用 jQuery 和 ASP.NET MVC 异步上传文件,无需表单提交和异步的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 和 ASP.NET MVC 刷新表信息

使用 jQuery 和 ASP.NET MVC 将集合插入模型,创建插件

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

ASP.NET MVC 和...YUI? jQuery?其他

自定义 asp.net mvc 3 jquery.validate.unobtrusive

如何在 ASP.NET MVC 中使用 flot 和 jQuery?