如何在c#中访问其事件之外的AsyncFileUpload类/对象?

时间:2012-04-06 14:32:15

标签: c# asp.net asp.net-ajax ajaxcontroltoolkit

我正在处理图片上传模块并在页面中有一个AsyncFileUpload控件,我相信(一旦用户浏览文件路径)将文件保存在temp中。缓冲,直到你调用方法AsyncFileUpload.SaveAs(filePath)

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

所以相反,我试图在AsyncFileUpload.SaveAs(filePath)内调用protected void btnUpload_Click(object sender, EventArgs e)但是如果我这样做,那么NullReferenceException是由用户代码无法处理的。

我相信这种情况正在发生,因为AsyncFileUpload会触发一个回发事件,因此当我再次调用它时它会变空。

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

任何建议都将受到高度赞赏。

StackTrace显示:

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

private static AsyncFileUpload fu = new AsyncFileUpload();

然后在Page_Load中添加以下行:

fileUpload.UploadedComplete += fileUpload_UploadedComplete;

其中

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

其中fileUpload是您的网页/网络用户控件中使用的AsyncFileUpload控件的ID。

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

当文件已经存在于服务器上时,我使用这种情况,我必须向用户发出确认警告(同意覆盖与否)(因为此警报会导致回发,因此来自ASU的信息丢失)

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

再见