0

我正在使用此处描述的 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

感谢任何建议。

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

提前致谢!

4

2 回答 2

1

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

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

这用于拦截持有文件的控件。

我写完之后

FileUploadCurrentControl.SaveAs(FineName)

它对我有用。

干杯。

于 2014-10-02T10:07:28.223 回答
0

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

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)
        {
        }
    }

如果它对与我面临类似问题的人有所帮助,我会很高兴。谢谢你。

于 2013-10-28T07:02:34.723 回答