如何使用 AjaxFileUpload.js 将 HTML 输入文件传递给 C# ASP.Net?

How do you pass HTML input files to C# ASP.Net using AjaxFileUpload.js?

我是 Whosebug 的新手,所以如果我误用了任何指南,我深表歉意。我正在制作一个 ASP.Net 网站,我 运行 遇到了一个非常具体的问题,我正在使用 ProcessRequest 尝试检索多个文件。

C#ASP.Net代码

变量 files 未检索请求的文件 context.Request.Files

public void ProcessRequest(HttpContext context)
{
     try
     {
          var files = context.Request.Files;

          for (int i = 0; i < files.Count; i++)
          {
               //Checking to see if the files exist
               var postedFile = files[i];
          }
     }
     catch (Exception e)
     {
          context.Response.Write(e.Message);
     }
}

我试图避免刷新网页和类型 submit 以允许用户流畅地浏览内容。我相信我的问题源于从 C# 后端动态添加我的输入文件 html 元素。

HTML

<div id='fmAddFiles'>
    <input id='fileUploader' type='file' multiple='true' runat='server'/>
    <input id='addFilesBtn' type='button' value='Add Files'/>
</div>
<div id='fmSubmit'><input id='uploadBtn' type='button' value='Upload'/></div>

我已经为 addFilesBtnfileUploader 绑定了点击和触发事件,它们被正确点击了。当我尝试使用 $.ajaxFileUpload 将文件传递到后端时,没有任何反应。

$.ajaxFileUpload({
     url: 'WebHandler.ashx',
     async: false,
     secureuri: false,
     fileElementId: 'fileUploader',
     dataType: 'json',
     success: function (data, status) {
          alert(data);
     },
     error: function (data, status, e) {
          alert(e);
     }
});

所有提到的功能都被击中了,只是我一辈子都弄不明白为什么它没有检索到任何文件。

我可能哪里出错了?

编辑

我尝试向我的 html 添加静态元素,发现服务器控件在动态添加元素时不起作用。完成后 runat='server' 标签不再有效。

现在我在十字路口。有没有办法将服务器控件绑定到一个元素,或者我将不得不使用一堆 CSS 技巧?即使在最好的时候,这对我来说也是相当混乱的。

我已经附上源代码了..

Js上传文件 Reference

检查一下让我知道.. File Upload Example

Handler.ashx

  <appSettings>
    <add key="FolderPath" value="/Resources/UploadFiles/" />
  </appSettings>

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Expires = -1;
            try
            {
                HttpPostedFile postedFile = context.Request.Files[0];
                string savepath = "";
                string tempPath = "";
                tempPath = System.Configuration.ConfigurationManager.AppSettings["FolderPath"];
                savepath = context.Server.MapPath(tempPath);
                string filename = postedFile.FileName;
                if (!Directory.Exists(savepath))
                {
                    Directory.CreateDirectory(savepath);
                }
                postedFile.SaveAs(savepath + @"\" + filename);
                context.Response.Write(tempPath + "/" + filename);
                context.Response.StatusCode = 200;
            }
            catch (Exception ex)
            {
                context.Response.Write("Error: " + ex.Message);
            }
        }

在我意识到我已经躲起来之前,我有一点灵光一现 fileUploader。我所做的只是将其设为静态并确保选择器使用服务器控件 ID,以便 uploadBtn 能够触发它。

还彻底查看了 Prasad Raja 的回答,并建议任何开始新项目的人都考虑一下。很有见地。