繁体   English   中英

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

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

我是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元素。

的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 uploadFile 参考

只是检查一下就让我知道。 文件上传示例

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的答案,并建议任何开始新项目的人员考虑一下。 很有见地。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM