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

本文关键字:ASP Net 使用 js AjaxFileUpload HTML 输入 文件 | 更新日期: 2023-09-27 18:01:37

我是stackoverflow的新手,所以如果我滥用了任何指导方针,我深表歉意。我正在制作一个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元素。

<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技巧?这对我来说是相当混乱的在最好的时候。

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

我在这里附上了源代码。

Js还是参考

检查一下,让我知道…文件上传示例

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的回答,建议任何开始新项目的人都考虑一下。非常有见地