0

我正在开发一个图像上传模块并AsyncFileUpload在页面中有一个控件,我相信(一旦用户浏览文件路径)将文件保存在临时文件中。缓冲区,直到您调用该方法AsyncFileUpload.SaveAs(filePath)

在我的情况下,我想在使用提交完整表单时调用此方法,(目的是如果用户浏览了图像,然后决定取消操作,则文件不能存储在服务器上),

所以相反,我试图在AsyncFileUpload.SaveAs(filePath)内部调用,protected void btnUpload_Click(object sender, EventArgs e)但如果我这样做,它会给出 NullReferenceException 是由用户代码导致的。

我相信这是因为AsyncFileUpload触发了一个回发事件,因此当我再次调用它时它是空的。

可能我需要在运行时从临时缓冲区存储/访问文件。

任何建议将不胜感激。

StackTrace 显示:

在 AjaxControlToolkit.AsyncFileUpload.SaveAs(String fileName) at _default.btnUpload_Click(Object sender, EventArgs e) in d:\Projects\ImageRepository_default.aspx.cs:line 27 at System.Web.UI.WebControls.Button.OnClick(EventArgs e ) 在 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) 在 System.Web.UI.Page 的 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)。在 System.Web.UI.Page.ProcessRequestMain 的 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 的 RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

4

2 回答 2

1

如果您将控件设置为persist=true,您应该能够在 AsyncFileUpload 事件之外访问其内容。

于 2012-05-30T17:28:39.927 回答
0

如果你愿意,你可以试试这个方法,直到你找到一个更优雅的方法。首先定义一个静态控件:

private static AsyncFileUpload fu = new AsyncFileUpload();

然后在 Page_Load 中添加以下行:

fileUpload.UploadedComplete += fileUpload_UploadedComplete;

在哪里

protected void fileUpload_UploadedComplete(object sender, AsyncFileUploadEventArgs e)
        {
            fu = fileUpload;
        }

在您的页面/Web 用户控件中使用的控件fileUpload的 ID在哪里。AsyncFileUpload

这将保留选择上传的文件的详细信息。

当文件已经存在于服务器上并且我必须向用户提示确认警报(是否同意覆盖)时,我会使用此方案(因为此警报会导致回发,因此来自 ASU 的信息会丢失)

希望它可以对某人有所帮助,因为我失去了一些宝贵的时间来寻找解决方法。最后我想出了这个,但我相信有一种更优雅的方式来做到这一点。

再见

于 2012-11-20T09:29:03.490 回答