What if the scenario is more advanced? I have an AsyncFileUpload with Repeater and Label below,
all in UpdatePanel. What I want is to show the list of uploaded files immediately after upload and save. When trying to call the databind procedure in AsyncFileUpload1.UploadedComplete handler (after saving the file), the Repeater stays unchanged. The
same result when trying to update a simple Label in UpdatePanel, but I can't figure out the ClientScriptBlock in that complicated case.
Protected Sub AsyncFileUpload1_UploadedComplete(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) Handles AsyncFileUpload1.UploadedComplete
'save file
System.Threading.Thread.Sleep(2000)
If (AsyncFileUpload1.HasFile) Then
Dim maxUploadSizeInBytes As Integer = CInt(System.Configuration.ConfigurationManager.AppSettings("MaxUploadSizeInBytes"))
If AsyncFileUpload1.PostedFile.ContentLength < maxUploadSizeInBytes Then
Dim strFolder As String = Server.MapPath("~/Upload/Clanek_" + Me._Clanek.KodClanku.ToString)
Try
If Not IO.Directory.Exists(strFolder) Then IO.Directory.CreateDirectory(strFolder)
Dim strFile As String = strFolder + "\" + IO.Path.GetFileName(e.filename)
If IO.File.Exists(strFile) Then IO.File.Delete(strFile)
AsyncFileUpload1.SaveAs(strFile)
'here I´m calling the databinding procedure
Catch ex As Exception
End Try
Else
'show a message - e.g. lMessage.Text = "cannot upload"
End If
End If
End Sub
Here is a simplified version of my broken code, I hope someone can understand what is wrong.
Could you send me the full project (with all folders and without MS SQL use) that I'll be able to run locally?
Sorry, I didn't had time yet to build a working page without confidential data.
I guess the problem come from the fact that the AsyncFileUpload component is inside a FormView itself in an UpdatePanel, so it never exist at page startup, it is created on the fly.
If you guys think that it's not the problem I will try soon to make a working page showing the problem.
Thnaks for the suggestion. Unfortunately the problem remains. I even tried to remove the
ItemTemplate part of the FormView, and it still doesn't work :(
Robotnic
Member
4 Points
2 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Oct 16, 2009 07:52 AM|LINK
Great! Thanks a lot, your solution works like a charm!
sovitec
Member
3 Points
16 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Oct 19, 2009 02:00 PM|LINK
Here is a simplified version of my broken code, I hope someone can understand what is wrong.
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> <script runat="server"> protected void AsyncFileUploadLogo_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) { // !!!!!!!!!!!!! This part is never call !!!!!!!!!!!!!!!!!!!! ((AjaxControlToolkit.AsyncFileUpload)sender).SaveAs(Server.MapPath(Request.ApplicationPath + e.filename)); } protected void ObjectDataSourceHeadingDetails_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { // set the input parameter to the value of the selected index if (this.GridViewHeadings.SelectedIndex >= 0) e.InputParameters["HeadingID"] = Convert.ToString(this.GridViewHeadings.DataKeys[this.GridViewHeadings.SelectedIndex].Value); } protected void GridViewHeadings_SelectedIndexChanged(object sender, EventArgs e) { // Display data in simple view mode this.FormViewHeadingDetails.ChangeMode(FormViewMode.ReadOnly); // Set visibility to true so Formview will render this.FormViewHeadingDetails.Visible = true; // Force databinding this.FormViewHeadingDetails.DataBind(); // Update the contents in the detail panel this.UpdatePanelHeadingDetails.Update(); // Show the modal popup this.ModalPopupExtenderHeadingDetails.Show(); } protected void GridViewHeadings_RowCommand(Object sender, GridViewCommandEventArgs e) { switch (e.CommandName) { case "EditHeading": // Display data in update view mode this.FormViewHeadingDetails.ChangeMode(FormViewMode.Edit); // Set visibility to true so Formview will render this.FormViewHeadingDetails.Visible = true; // Force databinding GridViewHeadings.SelectedIndex = Convert.ToInt32(e.CommandArgument); this.FormViewHeadingDetails.DataBind(); // Update the contents in the detail panel this.UpdatePanelHeadingDetails.Update(); // Define ImageLogo and HiddenFieldLogo in Javascript so they can be used to update image string script = "var ImageLogo = '" + FormViewHeadingDetails.FindControl("ImageLogo").ClientID + "'; var HiddenFieldLogo = '" + FormViewHeadingDetails.FindControl("HiddenFieldLogo").ClientID + "'; var ButtonUploadLogo = '" + FormViewHeadingDetails.FindControl("ButtonUploadLogo").ClientID + "';"; ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "UploadComplete", script, true); //AjaxControlToolkit.AsyncFileUpload AsyncFileUploadLogo = new AjaxControlToolkit.AsyncFileUpload(); //AsyncFileUploadLogo.UploadedComplete += new EventHandler<AjaxControlToolkit.AsyncFileUploadEventArgs>(AsyncFileUploadLogo_UploadedComplete); //AsyncFileUploadLogo.OnClientUploadComplete = "UploadComplete"; //AsyncFileUploadLogo.UploaderStyle = AjaxControlToolkit.AsyncFileUpload.UploaderStyleEnum.Traditional; //AsyncFileUploadLogo.ThrobberID = "ImageThrobber"; //HtmlTableCell td = (HtmlTableCell)FormViewHeadingDetails.FindControl("CellUploadLogo"); //td.Controls.Add(AsyncFileUploadLogo); // Show the modal popup this.ModalPopupExtenderHeadingDetails.Show(); break; } } protected void ButtonValidateHeading_Click(object sender, EventArgs e) { if (this.Page.IsValid) { // Move the data back to the data object FormViewHeadingDetails.UpdateItem(false); // Hide the modal popup ModalPopupExtenderHeadingDetails.Hide(); //// Refresh the grid so we can see our changed GridViewHeadings.DataBind(); UpdatePanelHeadings.Update(); } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function UploadComplete(sender, args) { $get(HiddenFieldLogo).value = args.get_fileName(); $get(ImageLogo).src = args.get_fileName(); } </script> </head> <body> <form id="form1" runat="server"> <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" /> <asp:LinqDataSource ID="LinqDataSourceHeadings" runat="server" ContextTypeName="ShopsDataContext" TableName="Headings" /> <asp:ObjectDataSource ID="ObjectDataSourceHeadingDetails" runat="server" TypeName="DataSourceHeadingDetails" SelectMethod="Select" UpdateMethod="Update" OnSelecting="ObjectDataSourceHeadingDetails_Selecting" /> <div> <asp:UpdatePanel ID="UpdatePanelHeadings" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:GridView ID="GridViewHeadings" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="LinqDataSourceHeadings" OnRowCommand="GridViewHeadings_RowCommand" OnSelectedIndexChanged="GridViewHeadings_SelectedIndexChanged"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:ImageButton ID="ButtonModify" runat="server" CommandName="EditHeading" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" Visible="False" /> <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> </Columns> </asp:GridView> </ContentTemplate> </asp:UpdatePanel> <asp:Button ID="ButtonModifyHidden" runat="server" Style="display: none" /> <cc1:ModalPopupExtender ID="ModalPopupExtenderHeadingDetails" runat="server" PopupControlID="PanelHeadingDetails" TargetControlID="ButtonModifyHidden" BackgroundCssClass="modalBackground" /> <asp:Panel ID="PanelHeadingDetails" runat="server" SkinID="PopupPanel" Style="display: none"> <asp:UpdatePanel ID="UpdatePanelHeadingDetails" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:FormView ID="FormViewHeadingDetails" runat="server" DataSourceID="ObjectDataSourceHeadingDetails"> <EditItemTemplate> <asp:HiddenField ID="HiddenFieldID" runat="server" Value='<%# Bind("ID") %>' /> <asp:HiddenField ID="HiddenFieldLogo" Value='<%# Bind("Logo") %>' runat="server" /> <asp:TextBox ID="TextBoxName" runat="server" Text='<%# Bind("Name") %>' /> <asp:Image ID="ImageLogo" runat="server" Width="48" Height="48" ImageUrl='<%# Request.ApplicationPath + Eval("Logo") %>' /><br /> <asp:Image ID="ImageThrobber" runat="server" SkinID="Throbber" /> <cc1:AsyncFileUpload ID="AsyncFileUploadLogo" runat="server" UploaderStyle="Traditional" ThrobberID="ImageThrobber" OnUploadedComplete="AsyncFileUploadLogo_UploadedComplete" OnClientUploadComplete="UploadComplete" /> <asp:Button ID="ButtonValidateHeading" runat="server" Text="Save" CausesValidation="true" OnClick="ButtonValidateHeading_Click" /> </EditItemTemplate> <ItemTemplate> <asp:Label ID="LabelHeading" runat="server" Text='<%# Bind("Name") %>' /> <asp:Image ID="ImageLogo" runat="server" ImageUrl='<%# Request.ApplicationPath + Eval("Logo") %>' /> </ItemTemplate> </asp:FormView> </ContentTemplate> </asp:UpdatePanel> </asp:Panel> </div> </form> </body> </html>Thank you all for your help
obout_teo
Contributor
2428 Points
398 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Oct 20, 2009 01:07 AM|LINK
Could you send me the full project (with all folders and without MS SQL use) that I'll be able to run locally?
patalik
Member
10 Points
5 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Oct 22, 2009 04:30 PM|LINK
What if the scenario is more advanced? I have an AsyncFileUpload with Repeater and Label below, all in UpdatePanel. What I want is to show the list of uploaded files immediately after upload and save. When trying to call the databind procedure in AsyncFileUpload1.UploadedComplete handler (after saving the file), the Repeater stays unchanged. The same result when trying to update a simple Label in UpdatePanel, but I can't figure out the ClientScriptBlock in that complicated case.
Protected Sub AsyncFileUpload1_UploadedComplete(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) Handles AsyncFileUpload1.UploadedComplete 'save file System.Threading.Thread.Sleep(2000) If (AsyncFileUpload1.HasFile) Then Dim maxUploadSizeInBytes As Integer = CInt(System.Configuration.ConfigurationManager.AppSettings("MaxUploadSizeInBytes")) If AsyncFileUpload1.PostedFile.ContentLength < maxUploadSizeInBytes Then Dim strFolder As String = Server.MapPath("~/Upload/Clanek_" + Me._Clanek.KodClanku.ToString) Try If Not IO.Directory.Exists(strFolder) Then IO.Directory.CreateDirectory(strFolder) Dim strFile As String = strFolder + "\" + IO.Path.GetFileName(e.filename) If IO.File.Exists(strFile) Then IO.File.Delete(strFile) AsyncFileUpload1.SaveAs(strFile) 'here I´m calling the databinding procedure Catch ex As Exception End Try Else 'show a message - e.g. lMessage.Text = "cannot upload" End If End If End Subobout_teo
Contributor
2428 Points
398 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Oct 23, 2009 12:59 AM|LINK
See my post above:
sovitec
Member
3 Points
16 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Oct 23, 2009 08:09 AM|LINK
Sorry, I didn't had time yet to build a working page without confidential data.
I guess the problem come from the fact that the AsyncFileUpload component is inside a FormView itself in an UpdatePanel, so it never exist at page startup, it is created on the fly.
If you guys think that it's not the problem I will try soon to make a working page showing the problem.
Thanks again for your help !
sovitec
Member
3 Points
16 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Oct 29, 2009 04:15 PM|LINK
Here's a working page using the Northwind database showing the problem.
The page just need to drop the employee table in a dbml.
Thank you all for your help.
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Test</title> <script runat="server"> protected void GvCustomers_SelectedIndexChanged(object sender, EventArgs e) { // set it to true so it will render this.fvCustomerDetail.Visible = true; // force databinding this.fvCustomerDetail.DataBind(); // update the contents in the detail panel this.updPnlCustomerDetail.Update(); // show the modal popup this.mdlPopup.Show(); if (fvCustomerDetail.CurrentMode == FormViewMode.Edit) { string script = "var PhotoImage = '" + fvCustomerDetail.FindControl("PhotoImage").ClientID + "'; var PhotoPathHiddenField = '" + fvCustomerDetail.FindControl("PhotoPathHiddenField").ClientID + "';"; ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "UploadComplete", script, true); } } protected void LdsCustomerDetail_Selecting(object sender, LinqDataSourceSelectEventArgs e) { // set the input parameter to the value of the selected index if (this.gvCustomers.SelectedIndex >= 0) e.WhereParameters["EmployeeID"] = Convert.ToInt32(this.gvCustomers.DataKeys[this.gvCustomers.SelectedIndex].Value); } protected void GvCustomers_RowCommand(Object sender, GridViewCommandEventArgs e) { switch (e.CommandName) { case "Select": switch (e.CommandArgument.ToString()) { case "Edit": this.fvCustomerDetail.ChangeMode(FormViewMode.Edit); break; case "ReadOnly": this.fvCustomerDetail.ChangeMode(FormViewMode.ReadOnly); break; } break; } } protected void BtnSave_Click(object sender, EventArgs args) { if (this.Page.IsValid) { // move the data back to the data object this.fvCustomerDetail.UpdateItem(false); this.fvCustomerDetail.Visible = false; // hide the modal popup this.mdlPopup.Hide(); // add the css class for our yellow fade ScriptManager.GetCurrent(this).RegisterDataItem( // The control I want to send data to this.gvCustomers, // The data I want to send it (the row that was edited) this.gvCustomers.SelectedIndex.ToString() ); // refresh the grid so we can see our changed this.gvCustomers.DataBind(); this.updatePanel.Update(); } } protected void AsyncFileUploadLogo_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) { ((AjaxControlToolkit.AsyncFileUpload)sender).SaveAs(Server.MapPath(Request.ApplicationPath + "/Photos/" + e.filename)); } </script> <script type="text/javascript"> function UploadComplete(sender, args) { alert("UploadComplete"); $get(PhotoPathHiddenField).value = args.get_fileName(); $get(PhotoImage).src = '<%= Request.ApplicationPath + "/Photos/" %>' + args.get_fileName(); } </script> <style type="text/css"> TR.updated TD { background-color: yellow; } .modalBackground { background-color: Gray; filter: alpha(opacity=70); opacity: 0.7; } </style> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="scriptManager" runat="server" /> <script type="text/javascript" language="javascript"> // attach to the pageLoaded event Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded); function pageLoaded(sender, args) { // the data key is the control's ID var dataKey = '<%= this.gvCustomers.ClientID %>'; var updatedRowIndex = args.get_dataItems()[dataKey]; // if there is a datakey for the grid, use it to // identify the row that was updated if (updatedRowIndex) { // get the row that was updated var tr = $get(dataKey).rows[parseInt(updatedRowIndex) + 1]; // add the 'updated' css class Sys.UI.DomElement.addCssClass(tr, 'updated'); // remove the css class in 1.5 seconds window.setTimeout(function() { Sys.UI.DomElement.removeCssClass( tr, 'updated' ); }, 1500); } } </script> <asp:LinqDataSource ID="ldsCustomerList" runat="server" ContextTypeName="NorthwindDataContext" TableName="Employees" Select="new (EmployeeID, LastName, FirstName, Title, Photo, PhotoPath)"> </asp:LinqDataSource> <asp:LinqDataSource ID="ldsCustomerDetail" runat="server" ContextTypeName="NorthwindDataContext" Select="new (EmployeeID, LastName, FirstName, Title, Photo, PhotoPath, Notes)" EnableUpdate="true" TableName="Employees" OnSelecting="LdsCustomerDetail_Selecting" Where="EmployeeID==@EmployeeID"> <WhereParameters> <asp:Parameter DefaultValue="0" Name="EmployeeID" Type="Int32" /> </WhereParameters> </asp:LinqDataSource> <asp:UpdatePanel ID="updatePanel" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:GridView ID="gvCustomers" runat="server" DataSourceID="ldsCustomerList" AutoGenerateColumns="False" OnSelectedIndexChanged="GvCustomers_SelectedIndexChanged" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" GridLines="Vertical" DataKeyNames="EmployeeID" OnRowCommand="GvCustomers_RowCommand"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:LinkButton ID="btnViewDetails" runat="server" Text="View" CommandName="Select" CommandArgument="ReadOnly" /> <asp:LinkButton ID="btnEditDetails" runat="server" Text="Edit" CommandName="Select" CommandArgument="Edit" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" ReadOnly="True" SortExpression="EmployeeID" Visible="false" /> <asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" SortExpression="LastName" /> <asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" SortExpression="FirstName" /> <asp:BoundField DataField="Title" HeaderText="Title" ReadOnly="True" SortExpression="Title" /> </Columns> <FooterStyle BackColor="#CCCCCC" /> <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="#CCCCCC" /> </asp:GridView> </ContentTemplate> </asp:UpdatePanel> <asp:Panel ID="pnlPopup" runat="server" Width="500px" Style="display: none;"> <asp:UpdatePanel ID="updPnlCustomerDetail" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:Button ID="btnShowPopup" runat="server" Style="display: none" /> <ajaxToolkit:ModalPopupExtender ID="mdlPopup" runat="server" TargetControlID="btnShowPopup" PopupControlID="pnlPopup" BackgroundCssClass="modalBackground" /> <asp:FormView ID="fvCustomerDetail" runat="server" BackColor="White" BorderColor="#999999" DataSourceID="ldsCustomerDetail" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" GridLines="Vertical"> <FooterStyle BackColor="#CCCCCC" /> <EditItemTemplate> EmployeeID: <%# Eval("EmployeeID") %> <asp:TextBox ID="EmployeeIDTextBox" runat="server" Text='<%# Bind("EmployeeID") %>' /> <br /> LastName: <%# Eval("LastName") %> <asp:TextBox ID="LastNameTextBox" runat="server" Text='<%# Bind("LastName") %>' /> <br /> FirstName: <asp:TextBox ID="FirstNameTextBox" runat="server" Text='<%# Bind("FirstName") %>' /> <br /> Title: <asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' /> <br /> Notes: <asp:TextBox ID="NotesTextBox" runat="server" Text='<%# Bind("Notes") %>' /> <br /> <asp:HiddenField ID="PhotoPathHiddenField" Value='<%# Bind("PhotoPath") %>' runat="server" /> <asp:Image ID="PhotoImage" runat="server" ImageUrl='<%# Request.ApplicationPath + "/Photos/" + Eval("PhotoPath") %>' /><br /> <ajaxToolkit:AsyncFileUpload ID="AsyncFileUploadLogo" runat="server" UploaderStyle="Traditional" OnUploadedComplete="AsyncFileUploadLogo_UploadedComplete" OnClientUploadComplete="UploadComplete" /> <br /> <div> <asp:LinkButton ID="btnSave" runat="server" Text="Save" OnClick="BtnSave_Click" CausesValidation="true" /> <asp:LinkButton ID="btnClose" runat="server" Text="Close" CausesValidation="false" /> </div> </EditItemTemplate> <ItemTemplate> EmployeeID: <asp:Label ID="EmployeeIDLabel" runat="server" Text='<%# Bind("EmployeeID") %>' /> <br /> LastName: <asp:Label ID="LastNameLabel" runat="server" Text='<%# Bind("LastName") %>' /> <br /> FirstName: <asp:Label ID="FirstNameLabel" runat="server" Text='<%# Bind("FirstName") %>' /> <br /> Title: <asp:Label ID="TitleLabel" runat="server" Text='<%# Bind("Title") %>' /> <br /> Notes: <asp:Label ID="NotesLabel" runat="server" Text='<%# Bind("Notes") %>' /> <br /> Photo: <asp:Image ID="PhotoPathLabel" runat="server" ImageUrl='<%# Request.ApplicationPath + "/Photos/" + Eval("PhotoPath") %>' /> <br /> <div> <asp:LinkButton ID="btnClose" runat="server" Text="Close" CausesValidation="false" /> </div> </ItemTemplate> <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" /> <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" /> <EditRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" /> </asp:FormView> </ContentTemplate> </asp:UpdatePanel> </asp:Panel> </div> </form> </body> </html>obout_teo
Contributor
2428 Points
398 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Nov 02, 2009 04:38 AM|LINK
The following trick will help you:
Put the same AsyncFileUpload control within invisible div into <ItemTemplate> also
<EditItemTemplate> ... <cc1:AsyncFileUpload ID="AsyncFileUploadLogo" runat="server" OnUploadedComplete="AsyncFileUploadLogo_UploadedComplete" /> </EditItemTemplate> <ItemTemplate> ... <div style="display: none;"> <cc1:AsyncFileUpload ID="AsyncFileUploadLogo" runat="server" OnUploadedComplete="AsyncFileUploadLogo_UploadedComplete" /> </div> </ItemTemplate>sovitec
Member
3 Points
16 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Nov 02, 2009 01:28 PM|LINK
Thnaks for the suggestion. Unfortunately the problem remains. I even tried to remove the ItemTemplate part of the FormView, and it still doesn't work :(
obout_teo
Contributor
2428 Points
398 Posts
Re: AsyncFileUpload : OnUploadedComplete not firing
Nov 03, 2009 01:43 AM|LINK
It is very strange - I have tested this solution, it works for me.