我正在处理图片上传模块并在页面中有一个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)
答案 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的信息丢失)
希望它能对某些人有所帮助,因为我花了一些宝贵的时间寻找解决方法。最后我想出了这个,但我相信有一种更优雅的方式来做到这一点。
再见