文件名不能为空错误抛出 ajaxfileupload(我页面上的第二个控件)

本文关键字:第二个 控件 不能 错误 ajaxfileupload 文件名 | 更新日期: 2023-09-27 18:36:37

我正在使用ajaxFileUpload,如下所述:http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/AjaxFileUpload/AjaxFileUpload.aspx

我必须在一个页面上使用三个ajaxFileUpload控件,以上传并保存到不同的位置。首先,所有上传器控件调用第一个上传者的 UploadComplete 事件(例如:ajaxFileupload2 总是调用 ajaxFileUpload1_UploadComplete)。

然后我找到了下面的帖子并尝试最后一个答案。不调用 Ajax 工具包文件上传

在我尝试最后一个答案后,3 个上传者正在调用他们自己的事件,该事件由 anyUploader 事件委派。但是,面对另一个问题是"消息:文件名不能为空"错误在第二个/第三个控件上抛出,而第一个上传器工作正常。


Stack Trace:
Error found in FileUploadComplete2.
Message: File name cannot be null.
Parameter name: sourceFileName
Stack Trace:    at System.IO.File.Move(String sourceFileName, String destFileName)
   at AjaxControlToolkit.AjaxFileUpload.SaveAs(String fileName, Boolean deleteAzureBlob) in f:'TeamCity'buildAgent'work'80acd78aa4c25314'Server'AjaxControlToolkit'AjaxFileUpload'AjaxFileUpload.cs:line 473
   at AjaxControlToolkit.AjaxFileUpload.SaveAs(String fileName) in f:'TeamCity'buildAgent'work'80acd78aa4c25314'Server'AjaxControlToolkit'AjaxFileUpload'AjaxFileUpload.cs:line 441
   at FileUpload.AjaxFileUploadTwo_UploadComplete(Object sender, AjaxFileUploadEventArgs e) in c:'Projects'WebSite'FileUpload.aspx.cs:line 364

感谢任何建议。

我的主要要求是允许用户根据他们使用的上传器同时上传并保存到不同的位置。

提前感谢!

文件名不能为空错误抛出 ajaxfileupload(我页面上的第二个控件)

我偶然发现了这个问题,我的解决方案涉及发送器参数的简单强制转换;在事件正文中我写道:

 AjaxControlToolkit.AjaxFileUpload FileUploadCurrentControl;
 FileUploadCurrentControl = (AjaxControlToolkit.AjaxFileUpload)sender;

这用于拦截保存文件的控件。

在我写完之后

FileUploadCurrentControl.SaveAs(FineName)

它对我有用。

干杯。

最后,我找到了解决问题的方法。由于从第二个上传者开始抛出"文件名不能为空"的错误,以下是我解决和满足项目要求的解决方法。

1)我写了一个由所有三个上传者
调用的通用函数2)为每个上传者设置由ClientID定义的不同路径(参考:不调用Ajax工具包文件上传)
3)通过AjaxUploadOne使用所有ajax函数(例如:AjaxUploadOne.SaveAs函数用于所有三个上传器)。——这条线解决了我的问题。在此之前,我正在使用每个上传者SaveAs功能,但它没有按预期工作。

我的示例代码如下,所有ajaxfileupload控件都调用相同的函数:-


protected void AnyUploader_FileUploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        try
        {
            string path = "";
            if (Request.QueryString["uplCtrlID"] != null)
            {
                //uplCtrlID (the query string param we injected with the overriden JS function)
                //contains the ID of the uploader.
                //We'll use that to fire the appropriate event handler...
                if (Request.QueryString["uplCtrlID"] == AjaxFileUploadOne.ClientID)
                {      
                    /** different path assignment for each uploader **/
                    path = @"C:'Temp'FileUploaderOne'";
                    if (!Directory.Exists(path))  Directory.CreateDirectory(path);
                    AjaxFileUploadOne.SaveAs(path + e.FileName);                   
                }
                else if (Request.QueryString["uplCtrlID"] == AjaxFileUploadTwo.ClientID)
                {
      /** different path assignment for each uploader **/
                    path = @"C:'Temp'FileUploaderTwo'";
                    if (!Directory.Exists(path)) Directory.CreateDirectory(path);
                    AjaxFileUploadOne.SaveAs(path + e.FileName);              
                }
                else if (Request.QueryString["uplCtrlID"] == AjaxFileUploadThree.ClientID)
                {
                    /** different path assignment for each uploader **/
                    path = @"C:'Temp'FileUploaderThree'";
                    if (!Directory.Exists(path)) Directory.CreateDirectory(path);
                    AjaxFileUploadOne.SaveAs(path + e.FileName);                                    
                }
            }            
        }
        catch (Exception ex)
        {
        }
    }

如果它能帮助那些与我面临类似问题的人,我会很高兴。谢谢。