Hello,
I have build an uploadcontrol. The user can upload files and can view the uploaded file. For this I use the RadFileExplorer. Everything is working fine except deleting files. When I change a folder the addressbar is updated fine. But when I want to delete an image in the FileExplorer, the file is not deleted because the CurrentFolder-property in the codebehind is not updated to the path of the folder I selected. When I fire the event for the second time it works well because the CurrentFolder-property is updated this time. So, it looks I'm walking one postback behind.
Can anyone tell me what I'm doing wrong. Thx
I have build an uploadcontrol. The user can upload files and can view the uploaded file. For this I use the RadFileExplorer. Everything is working fine except deleting files. When I change a folder the addressbar is updated fine. But when I want to delete an image in the FileExplorer, the file is not deleted because the CurrentFolder-property in the codebehind is not updated to the path of the folder I selected. When I fire the event for the second time it works well because the CurrentFolder-property is updated this time. So, it looks I'm walking one postback behind.
Can anyone tell me what I'm doing wrong. Thx
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>UploadManager voor productafbeeldingen</title> <link href="CSI/css/custom/admin.css" rel="stylesheet" type="text/css" /> <link href="CSI/CSS/telerik/Slider.UIN.css" rel="stylesheet" type="text/css" /> <link href="CSI/CSS/telerik/ComboBox.UIN.css" rel="stylesheet" type="text/css" /> <link href="CSI/CSS/telerik/Calendar.UIN.css" rel="stylesheet" type="text/css" /> <link href="CSI/CSS/telerik/Input.UIN.css" rel="stylesheet" type="text/css" /> <link href="CSI/CSS/telerik/TreeView.UIN.css" rel="stylesheet" type="text/css" /> <link href="CSI/CSS/telerik/Upload.UIN.css" rel="stylesheet" type="text/css" /> <link href="CSI/CSS/telerik/FileExplorer.UIN.css" rel="stylesheet" type="text/css" /> <script src="CSI/JS/3rdparty/flash_detect.js" type="text/javascript"></script> <script src="CSI/JS/jQuery/jquery-1.6.2.min.js" type="text/javascript"></script> <script src="CSI/JS/jQuery/jquery-1.2.6.min.js" type="text/javascript"></script> <script src="CSI/JS/telerik/IntegrationScripts.js" type="text/javascript"></script> <telerik:RadCodeBlock ID="codeBlock1" runat="server"> <script type="text/javascript"> //<![CDATA[ function OnClientDirectoryChange(sender, args) { alert("Tree dir change: " + args.get_path()); } function OnClientItemClick(sender, args) { alert("Item click: " + args.get_path()); } //]]> </script> </telerik:RadCodeBlock> </head>
<body> <form runat="server" id="mainForm" method="post"> <telerik:RadScriptManager ID="ScriptManager1" runat="server" /> <telerik:RadProgressManager ID="Radprogressmanager1" runat="server" /> <div class="productimagemanager"> <div class="qualitycenter"> <div class="fileexplorer"> <table cellspacing="4"> <tr> <td rowspan="2" style="vertical-align: top;"> <telerik:RadFileExplorer runat="server" ID="RadFileExplorer1" Width="700px" Height="500px" Skin="UIN" EnableOpenFile="true" OnClientLoad="OnFileExplorerLoad" OnClientFolderChange="OnClientDirectoryChange"> <Configuration ViewPaths="~/media/QualityCenter/forapproval/retailer65" DeletePaths="~/media/QualityCenter/forapproval/retailer65" UploadPaths="~/media/QualityCenter/forapproval/retailer65" /> </telerik:RadFileExplorer> </td> </tr> </table> </div> <asp:Panel ID="ListViewHolder" runat="server"> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel" runat="server"> </telerik:RadAjaxLoadingPanel> <telerik:RadXmlHttpPanel ID="RadXmlHttpPanel1" runat="server" OnServiceRequest="RadXmlHttpPanel1_ServiceRequest" RenderMode="Block" EnableClientScriptEvaluation="true" LoadingPanelID="RadAjaxLoadingPanel" OnClientResponseEnded="OnClientResponseEnded"> <telerik:RadContextMenu ID="RadListViewContextMenu" runat="server" OnClientItemClicked="RadListViewMenuItemClicked"> </telerik:RadContextMenu> <telerik:RadListView ID="RadListView1" runat="server" ItemPlaceholderID="ItemPlaceHolder1" AllowPaging="true" AllowCustomPaging="true" PageSize="6" OnItemDataBound="RadListView1_ItemDataBound" OnItemCommand="RadListView1_ItemCommand"> <LayoutTemplate> <div class="imagelibrary"> <div class="actiebuttons"> <asp:ImageButton ID="btnSaveNewImageNames" runat="server" ImageUrl="~/App_Themes/UIN/Layout/buttons/opslaanensluitenbutton.png" Width="194px" Height="30px" ToolTip="Opslaan artikel en artikelwizard afsluiten" CommandName="updatefilenames" Visible="false" /> </div> <asp:PlaceHolder ID="ItemPlaceHolder1" runat="server"></asp:PlaceHolder> </div> </LayoutTemplate> <ItemTemplate> <asp:Panel ID="itemTemplateHolder" runat="server" CssClass="lvItemTemplate" ondblclick="openImageForPreview(this);" onclick="imageSelected(this);"> <div class="imageitem"> <div class="imagefile"> <asp:Image ID="imgImageFile" runat="server" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Path") %>' AlternateText="Image" CssClass="imagefile" /> <asp:ImageButton ID="imgDeleteFile" runat="server" ImageUrl="~/App_Themes//UIN//Layout//buttonDeleteImage.png" CssClass="deleteimage" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Path") %>' OnClick="imgDeleteFile_Click" OnClientClick="return confirm('Weet u zeker dat u deze afbeelding wilt verwijderen?');" /> <input type="hidden" value="<%# GetFileItemProperties(Container.DataItem) %>" /> </div> <div class="imageoldname"> <asp:Label ID="lblImageOldNameLabel" runat="server" Text="Huidige bestandsnaam" CssClass="labelheader"></asp:Label> <asp:Label ID="lblImageOldName" runat="server" CssClass="imagenamelabel" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>'></asp:Label></div> <div class="imagenewname"> <asp:Label ID="lblImageNewName" runat="server" Text="Nieuwe naam" CssClass="labelheader"></asp:Label> <asp:TextBox ID="txtImageNewName" runat="server"> </asp:TextBox></div> </div> </asp:Panel> </ItemTemplate> </telerik:RadListView>
</telerik:RadXmlHttpPanel> </asp:Panel> </div> </div>
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript"> function loadListViewContent(pathToFolder, sliderIndex) { var pageIndexChangeArg = pathToFolder + "$|$" + sliderIndex; var oXmlPanel = $find("<%= RadXmlHttpPanel1.ClientID %>"); selectedListViewItems = []; // Clear selection oXmlPanel.set_value(pageIndexChangeArg); } function getRadFileExplorer1() {// returns RadFileExplorer1 client-side object var oExplorer = $find("<%= RadFileExplorer1.ClientID %>"); return oExplorer; } </script> </telerik:RadCodeBlock> </form></body></html>protected void Page_Load(object sender, System.EventArgs e) { RadFileExplorer1.VisibleControls = Telerik.Web.UI.FileExplorer.FileExplorerControls.ContextMenus | Telerik.Web.UI.FileExplorer.FileExplorerControls.TreeView| Telerik.Web.UI.FileExplorer.FileExplorerControls.AddressBox; //set properties according to configuration panel RadFileExplorer1.Configuration.SearchPatterns = new string[] { "*.jpg", "*.jpeg" }; RadFileExplorer1.EnableOpenFile = false; RadFileExplorer1.DisplayUpFolderItem = true; RadFileExplorer1.AllowPaging = false; RadFileExplorer1.EnableCreateNewFolder = false; RadFileExplorer1.FindControl("paneTree").Controls.Add(ListViewHolder); if (!Page.IsPostBack) { BindCollections(); txtArchiveName.Text = DateTime.Today.ToShortDateString(); if (!string.IsNullOrEmpty(RadFileExplorer1.InitialPath)) { bool isDirectory = VirtualPathUtility.GetExtension(RadFileExplorer1.InitialPath) == string.Empty; if (isDirectory) {// The InitialPath points to a file // Get the directory: string parentDirectory = VirtualPathUtility.GetDirectory(RadFileExplorer1.InitialPath); LoadListViewData(0, parentDirectory); } else {// The InitialPath contains a directory path string parentDirectory = RadFileExplorer1.InitialPath; LoadListViewData(0, parentDirectory); } } else {// The InitialPath property is not set ==> load the first folder in the ViewPaths property string targetFolder = RadFileExplorer1.Configuration.ViewPaths[0] + "/" + cboCollection.Items[0].Text.Replace(" ", "_"); // +"/" + txtArchiveName.Text; string parentDirectory = targetFolder; // RadFileExplorer1.Configuration.ViewPaths[0]; LoadListViewData(0, parentDirectory); } } else { Control postbackControl = GetPostBackControl(this);// get the control that is coused the post back ; if (postbackControl != null && postbackControl.ID == "buttonSubmit") { RadFileExplorer1.TreeView.Nodes.Clear(); TargetFolder = "~/" + RETAILER_IMAGEPATH + FILIAAL_ID + "/" + cboCollection.Items[0].Text + "/" + txtArchiveName.Text; RadFileExplorer1.InitialPath = Page.ResolveUrl(TargetFolder); } } //RemoveBackForwardRefreshButtons(); }protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (IsPostBack) {// This code ensures that the RadListView's content will be refreshed when a new file is uploaded string parentDirectory = RadFileExplorer1.CurrentFolder; LoadListViewData(0, parentDirectory); } }protected void imgDeleteFile_Click(object sender, ImageClickEventArgs e) { File.Delete(Server.MapPath(((ImageButton)sender).CommandArgument)); } protected void RadListView1_ItemDataBound(object sender, RadListViewItemEventArgs e) {// This event is used in order to associate the 'RadListViewContextMenu' with every itemTemplateHolder panes in the RadListView Telerik.Web.UI.RadListViewDataItem lvitem = (Telerik.Web.UI.RadListViewDataItem)e.Item; ContextMenuElementTarget elementTarget = new ContextMenuElementTarget(); Control paneControl = e.Item.FindControl("itemTemplateHolder"); RadBinaryImage oImage = e.Item.FindControl("imgImageFile") as RadBinaryImage; ImageButton oDeleteImage = e.Item.FindControl("imgDeleteFile") as ImageButton; elementTarget.ElementID = paneControl.ClientID; RadListViewContextMenu.Targets.Add(elementTarget); } protected void RadListView1_ItemCommand(object sender, RadListViewCommandEventArgs e) { if (e.CommandName == "updatefilenames") { foreach (RadListViewDataItem item in RadListView1.Items) { TextBox oNewImageName = item.FindControl("txtImageNewName") as TextBox; Label oOldImageName = item.FindControl("lblImageOldName") as Label; Image oImage = item.FindControl("imgImageFile") as Image; string path = RadFileExplorer1.CurrentFolder; if (oOldImageName != null && oNewImageName != null) { if (oNewImageName.Text != string.Empty) { string updatePath = oImage.ImageUrl.Replace(oOldImageName.Text, oNewImageName.Text + ".jpg"); File.Move(Server.MapPath(oImage.ImageUrl), Server.MapPath(updatePath)); } } } LoadListViewData(0, RadFileExplorer1.CurrentFolder); } } protected void RadXmlHttpPanel1_ServiceRequest(object sender, RadXmlHttpPanelEventArgs e) {// The value of e.Value looks like this: '/ListViewIntegration/FileExplorer/ExplorerSource/Images/Customers$|$0' string[] arguments = e.Value.Split(new string[] { "$|$" }, StringSplitOptions.RemoveEmptyEntries); string pathToFolder = arguments[0]; string sliderValue = arguments[1]; int sliderIndexAsInt = int.Parse(sliderValue); LoadListViewData(sliderIndexAsInt, pathToFolder); } private void LoadListViewData(int sliderIndex, string pathToFolderForLoad) { List<FileItem> allFilesInFolder = GetFilesSorted(pathToFolderForLoad); if (allFilesInFolder.Count.Equals(0)) {// No files in directory //RadSlider1.Enabled = false;// Disable slider (or hide it (RadSlider1.Visible = false)) RadListView1.DataSource = null; RadListView1.DataBind();// Clear content ((ImageButton)RadListView1.FindControl("btnSaveNewImageNames")).Visible = false; } else { //RadSlider1.Enabled = true;// Enable RadeSlider // Starting index int fromIndex = sliderIndex * RadListView1.PageSize; // Calculate the count of the images int count = (fromIndex + RadListView1.PageSize) < allFilesInFolder.Count ? RadListView1.PageSize : allFilesInFolder.Count - fromIndex; // Get maximum 4 files at a time List<FileItem> listViewSource = allFilesInFolder.GetRange(fromIndex, count); RadListView1.DataSource = listViewSource; RadListView1.DataBind(); ((ImageButton)RadListView1.FindControl("btnSaveNewImageNames")).Visible = true; long outLong = new long();// USed in order to be compliant with the VB.NET version // Refresh slire's values //RadSlider1.MaximumValue = (allFilesInFolder.Count % RadListView1.PageSize).Equals(0) ? Math.DivRem(allFilesInFolder.Count, RadListView1.PageSize, out outLong) - 1 : Math.DivRem(allFilesInFolder.Count, RadListView1.PageSize, out outLong); //RadSlider1.Value = sliderIndex; // Checks permissions and associates a context menu with all images in the ListView CreateListContextMenu(pathToFolderForLoad); } } private void CreateListContextMenu(string pathToOpenedFolder) { RadTreeViewContextMenu treeContextMenu = RadFileExplorer1.TreeView.ContextMenus[0]; RadListViewContextMenu.Items.Clear(); foreach (RadMenuItem treeMenuItem in treeContextMenu.Items) { RadMenuItem clonedTreeMenuItem = treeMenuItem.Clone(); switch (clonedTreeMenuItem.Value) { case "Delete": { bool enableCommand = ContentProvider.CheckDeletePermissions(pathToOpenedFolder); if (enableCommand) {// The path has Delete permisson ==> Delete is allowed RadListViewContextMenu.Items.Add(clonedTreeMenuItem); } } break; case "Upload": { bool enableCommand = ContentProvider.CheckWritePermissions(pathToOpenedFolder); if (enableCommand) {// The path has Write permisson ==> upload is allowed RadListViewContextMenu.Items.Add(clonedTreeMenuItem); } } break; } } if (RadFileExplorer1.EnableOpenFile) { RadMenuItem openFileItem = new RadMenuItem(); openFileItem.Value = "Open"; openFileItem.Text = "Open"; openFileItem.PostBack = false; openFileItem.EnableViewState = false; openFileItem.SelectedCssClass = "rfeNoClass"; RadListViewContextMenu.Items.Add(openFileItem); } RadListViewContextMenu.Skin = RadFileExplorer1.Skin; } /// <summary> /// Returns an instance of FileBrowserContentProvider asociated with RadFileExplorer control. If a cusom provider is used, then this propperty should return /// an instance of that cusom provider. /// </summary> private FileBrowserContentProvider ContentProvider { get { if (object.Equals(this._contentProvider, null)) { this._contentProvider = new FileSystemContentProvider(this.Context, RadFileExplorer1.Configuration.SearchPatterns, RadFileExplorer1.Configuration.ViewPaths, RadFileExplorer1.Configuration.UploadPaths, RadFileExplorer1.Configuration.DeletePaths, string.Empty,
} return this._contentProvider; } }