I'm currently trying to build a form using several input fields and a RadImageEditor. The problem is the only way to save the picture is to call the client-side function "saveImageOnServer". This function though is called asynchronously, so sometimes the picture is hold in my Session, sometimes the button onSave - servermethod is called first and the Session is empty.
Is there any possiblity to ensure the image-save function is called first or to get the edited image inside the postback?
8 Answers, 1 is accepted
All editing applied to the image edited in RadImageEditor used in Canvas mode are stored on the client, so it is no way to get the Edited image on a Postback. In order to ensure that the edited image is successfully sent to the server, I would advice that you disable the AutoPostback functionality of the saving button and move the logic of its server-side click handler to the ImageSaving event (called after the edited image is passed to the server).
A similar approach is demonstrated in the following live demo:
http://demos.telerik.com/aspnet-ajax/imageeditor/examples/customsaving/defaultcs.aspx?show-source=true
Regards,
Vessy
Progress Telerik
[quote][...] I would advice that you disable the AutoPostback functionality of the saving button and move the logic of its server-side click handler to the ImageSaving event (called after the edited image is passed to the server).
[/quote]
I already did this, the problem is still that I need to submit the form values after saving the Image successfully. In the OnImageSaving Method there are no postback values though...
[quote][...] I would advice that you disable the AutoPostback functionality of the saving button and move the logic of its server-side click handler to the ImageSaving event (called after the edited image is passed to the server).
[/quote]
I already did this, the problem is still that I need to submit the form values after saving the Image successfully. In the OnImageSaving Method there are no postback values though...
[/quote]
I managed to misuse the filename parameter for my form values. However, how can I get back a status if my saving was successful to the client?
01.<asp:ImageButton ID="ib_save" ImageUrl="/pics_new/32x32/save.png" runat="server" AutoPostBack="False"02. OnClientClick="buttonclick();" ToolTip="Speichern" Text="Speichern" />03. 04. 05. function buttonclick(sender, args) {06. $find("<%= rie.ClientID %>")07. .saveImageOnServer(08. $find("<%= rdptErstellung.ClientID %>").get_selectedDate().toISOString() + "-!#"09. + document.getElementById("cbProtokollStatus").checked + "-!#"10. + $find("<%= rddlSchicht.ClientID %>").get_selectedItem().get_value() + "-!#"11. + $find("<%= rddlAfo.ClientID %>").get_selectedItem().get_value() + "-!#"12. + $find("<%= rtbBemerkung.ClientID %>").get_value() + "-!#"13. + $find("<%= rddlAbarbStatus.ClientID %>").get_selectedItem().get_value() + "-!#"14. + $find("<%= rdtpRueck.ClientID %>").get_selectedDate().toISOString() + "-!#"15. , true);16.}17. 18. 19. protected void rie_OnImageSaving(object sender, ImageEditorSavingEventArgs e)20. {21. using (var stream = new MemoryStream())22. {23. e.Image.Image.Save(stream, ImageFormat.Png);24. Session["Bild"] = stream.ToArray();25. SaveProtokoll(e.FileName);26. }27. }The ImageEditor updates itself on a Callback thus it is not possible to update other controls on the page (or perform a full Postback) while the edited image is being saved.
A possible approach you can consider is attaching a handler to the client-side Saved event of the control, that is called just after the image has been successfully saved and perform a postback manually in it. You can either call the __doPostback() function are click() of a hidden button, assigning the needed server-side logic to its server-side click handler.
For example you can have a similar implementation:
<telerik:RadImageEditor ID="RadImageEditor1" runat="server" ImageUrl="~/image.png" OnClientSaved="onImageSaved" OnImageSaving="RadImgEdt_ImageSaving" Skin="Default"> </telerik:RadImageEditor><div style="display:none"> <telerik:RadButton ID="hiddenButton" runat="server" OnClick="hiddenButton_Click"></telerik:RadButton></div><script> function onImageSaved(imageEditor, args) { $find("hiddenButton").click(); //or //__doPostBack(); }</script>protected void RadImgEdt_ImageSaving(object sender, Telerik.Web.UI.ImageEditorSavingEventArgs args){ //Save the image to a custom location args.Cancel = true;}protected void hiddenButton_Click(object sender, EventArgs e){ //the desired post-image-saving logic here Response.Write("Server-side logic after the image is successfully saved");}Regards,
Vessy
Progress Telerik
Can you verify that you have disabled the AutoPostback of the custom save button? The triggering of the ClientSaved event should be the same both when using the the Save tool, or a custom button:
<telerik:RadImageEditor ID="RadImageEditor1" runat="server" ImageUrl="~/image.png" OnClientSaved="onImageSaved" OnImageSaving="RadImgEdt_ImageSaving" Skin="Default"> </telerik:RadImageEditor><telerik:RadButton ID="CustomSaveBtn" runat="server" Text="Save" AutoPostBack="false" OnClientClicked="saveImage"></telerik:RadButton><div style="display:none"> <telerik:RadButton ID="hiddenButton" runat="server" OnClick="hiddenButton_Click"></telerik:RadButton></div><script> function saveImage() { $find("RadImageEditor1").saveImageOnServer("", true); } function onImageSaved(imageEditor, args) { alert("saved"); $find("hiddenButton").click(); //or //__doPostBack(); }</script>protected void RadImgEdt_ImageSaving(object sender, Telerik.Web.UI.ImageEditorSavingEventArgs args){ //Save the image to a custom location args.Cancel = true;} protected void hiddenButton_Click(object sender, EventArgs e){ //the desired post-image-saving logic here Response.Write("Server-side logic after the image is successfully saved");}Regards,
Vessy
Progress Telerik
You are welcome, Jan - I am happy to know the proposed solution is working for you.
Regards,
Vessy
Progress Telerik
