【问题标题】:Get uploaded file on submit button C# MVC在提交按钮 C# MVC 上获取上传的文件
【发布时间】:2020-10-28 10:44:01
【问题描述】:

我可以在输入文件更改时上传文件 不使用 HTML 助手类。但我需要在提交按钮上读取并获取上传的文本文件的数据。

下面是我在 html 中使用的代码:

<div>
   <input id="uploadtxtfile" type="file" multiple />
   <button type="submit" class="btn-sm" id="btnuploadfile"/>                         
</div>

和我正在调用的 jquery 代码:

$('#uploadtxtfile').change(function (e) {
    var i = 0;
    var files = $("#uploadtxtfile").get(0).files;
    fileData = new FormData();      
    for (i; i < files.length; i++) {
        var fileName = e.target.files[0].name;
        fileData.append(fileName, files[i]);
        $("#txtUpload").val(fileName);         
    }       
    $.ajax({
        type: "POST",
        url: "/ViewProcessEDI/UploadTextFile",
        async: true,
        dataType: "json",
        contentType: false,
        processData: false,
        data: fileData,
        success: function (res) {
            if (res.Message == "Success") {
                divListProcessEDI($("#currentPage").val());
                popup.close();
                setTimeout(function () {
                    Message('Success!', 'TextFile Upload Successfully!', 's');
                }, 100);
            }
            else {
                Message('Error!', res.Message, 'e');
            }
        }
    });
});

和控制器功能是:

如何在提交按钮上获取上传的文件。谁能指导我。

[HttpPost]
    public async Task<JsonResult> UploadTextFile()
    {
        string ErrorMessage = string.Empty;
        Dictionary<string, string> returnVal = new Dictionary<string, string>();
        try
        {
            CredentialsMaster objCredentialsMaster = new CredentialsMaster();
            if (CheckSession.CheckStoreOwnerSession(ref objCredentialsMaster))
            {
                if (Request.Files.Count > 0)
                {
                    HttpFileCollectionBase files = Request.Files;
                    for (int i = 0; i < files.Count; i++)
                    {
                        HttpPostedFileBase file = files[i];
                        string fname;
                        // Checking for Internet Explorer  
                        if (Request.Browser.Browser.ToUpper() == "IE" || Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER")
                        {
                            string[] testfiles = file.FileName.Split(new char[] { '\\' });
                            fname = testfiles[testfiles.Length - 1];
                        }
                        else
                        {
                            fname = file.FileName;
                        }
                        if (file != null && file.ContentLength > 0)
                        {
                            // Get the complete folder path and store the file inside it.  
                            file.SaveAs(Path.Combine(@"E:\EDITextFiles", fname));                               
                        }
                    }
                }
            }
            else
            {
                ErrorMessage = "Session Expired";
            }
        }
        catch (Exception ex)
        {
            ErrorMessage = ex.Message;
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json("Upload failed");
        }           
        return Json("File Uploaded Successfully");
    }

谢谢。

【问题讨论】:

  • 您是否尝试在互联网上寻找答案?你可以从this link开始
  • 是的,我浏览了链接,但我需要在不使用 MVC 中的 HTML 帮助器类的情况下这样做
  • 所以请描述您的设置和限制并添加代码 sn-p 以便我们更好地了解您的上下文

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


【解决方案1】:

我得到了我需要从以下帖子中得到的答案: passing file to controller without using form,

我需要在 javascript 中将发布的文件名作为 jQuery("#file").get(0).files[0] 传递,以便我可以在控制器函数中获取发布的文件名。

【讨论】:

    【解决方案2】:

    您的问题的本质是如何在没有 @HTML 帮助器的情况下执行此操作。通过使用表单元素并调用操作,您始终可以在没有这些助手的情况下做事。 @HTML 助手只是协助创建 HTML5 元素。如果您需要,表单元素将允许在无需使用 Ajax 的情况下调用控制器。

    html form posting to mvc controller

    【讨论】:

      猜你喜欢
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2013-09-16
      • 2018-01-28
      相关资源
      最近更新 更多