Telerik Forums
UI for ASP.NET MVC Forum
1 answer
258 views
Hi,

I am using the image browser to upload  images to  FTP server(we are using Akamai FTP). I have written a process  whereby the file is uploaded,and the MVC controller uploads and saves the image in my FTP specified location with the same name with which is is uploaded as.  It then returns the JSON result with that name of the image. I have checked the sample "KendoEditorImageBrowser" given by your team but  this process is working perfectly on a local machine. However, for FTP server or for other locations the image was uploaded, but the thumbnail keeps on rotating.

While debugging the code I found that the Thumbnail is getting called with only the file name but not the path with Which I call or  in which the file is located(I have provided the path location in code) which is of no help for me.

But when I close and reopen my Image Browser the image is getting loaded correctly.  I am using the latest Kendo UI version

This is my Controller code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using MarketingAdvocate.Admin.Controllers.Base;
using MarketingAdvocate.Admin.Models.CampaignDetail;
using System.IO;
using MarketingAdvocate.Utility.Common;
using System.Web;
using System.Web.Mvc;
using System.Net;

namespace MarketingAdvocate.Admin.Controllers
{
    public class ImageBrowserController:BaseController
    {
         private const string prettyName = "Images/";        
        private const string DefaultFilter = "*.png,*.gif,*.jpg,*.jpeg";

        private const int ThumbnailHeight = 80;
        private const int ThumbnailWidth = 80;

        private readonly DirectoryBrowser directoryBrowser;
        private readonly ThumbnailCreator thumbnailCreator;

        public ImageBrowserController()
        {
            directoryBrowser = new DirectoryBrowser();
            thumbnailCreator = new ThumbnailCreator();
        }

        /// <summary>
        /// Upload
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public virtual ActionResult Upload(string path,HttpPostedFileBase file)
        {

            Utility.Business.Client.Client client = new Utility.Business.Client.Client(ClientId);
            Utility.Business.Client.SiteSection siteSection = new Utility.Business.Client.SiteSection(SiteSectionId);

            Utility.Business.FTPUpload ftpUpload = new Utility.Business.FTPUpload();
            var fullclient = client.ClientId + "_" + client.FolderForAkamai;
            var fullsitesection = siteSection.SiteSectionId + "_" + siteSection.FolderForAkamai;
            var destination = "/Clients/" + fullclient + "/" + fullsitesection + "/" + "Email" + "/" + "Images" + "/" + "Test" + "/";
            var fileLenght = 0;
            if ((string.IsNullOrEmpty(path)) || (path == "/"))
            {
                path = destination;
            }
            var source = string.Empty;
            Random rnd = new Random();
            var uploadFirstImages = file;
            if (uploadFirstImages != null && uploadFirstImages.ContentLength > 0)
            {
                source = uploadFirstImages.FileName.Replace("/", "\\");

                if (source.IndexOf("\\") != -1)
                {
                    source = source.Substring(source.LastIndexOf("\\") + 1);
                }

                while (ftpUpload.FileExist(source, destination))
                {
                    source = rnd.Next(0, 1000).ToString() + "|" + source;
                }
                var fileInputStream = uploadFirstImages.InputStream;
                ftpUpload.CopyFile(source, fileLenght, fileInputStream, path);

            }

            return Json(new
            {
                size =  file.ContentLength,
                name = ""http://url here" + path + file.FileName,
                type = "f"
            }, "text/plain");

           
        }

        /// <summary>
        /// Read
        /// </summary>
        /// <returns></returns>
        public virtual JsonResult Read(string path)
        {

            Utility.Business.Client.Client client = new Utility.Business.Client.Client(ClientId);
            Utility.Business.Client.SiteSection siteSection = new Utility.Business.Client.SiteSection(SiteSectionId);
            var fullclient = client.ClientId + "_" + client.FolderForAkamai;
            var fullsitesection = siteSection.SiteSectionId + "_" + siteSection.FolderForAkamai;
            var destination = "/Clients/" + fullclient + "/" + fullsitesection + "/" + "Email" + "/" + "Images" + "/" + "Test/";

            if ((string.IsNullOrEmpty(path)) || (path == "/"))
            {
                path = destination;
            }
            directoryBrowser.Server = Server;

            var result = directoryBrowser
                .GetContent(path, DefaultFilter)
                .Select(f => new
                {
                    name = "http:url here" + path + f.Name,
                    type = f.Type == EntryType.File ? "f" : "d",
                    size = f.Size
                });

          
            return Json(result, JsonRequestBehavior.AllowGet);

            //return Json(destination);

        }

        [OutputCache(Duration = 3600, VaryByParam = "path")]
        public virtual ActionResult Thumbnail(string path)
        {
            
            return CreateThumbnail(path);

        }

        private FileContentResult CreateThumbnail(string physicalPath)
        {
            WebClient client = new WebClient();
            Stream stream = client.OpenRead(physicalPath);
            using (var fileStream = stream)
            {
                var desiredSize = new ImageSize
                {
                    Width = ThumbnailWidth,
                    Height = ThumbnailHeight
                };

                const string contentType = "image/png";

                return File(thumbnailCreator.Create(fileStream, desiredSize, contentType), contentType);
            }
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public virtual ActionResult Create(string path, FileBrowserEntry entry)
        {
            var name = entry.Name;

            Utility.Business.Client.Client client = new Utility.Business.Client.Client(ClientId);
            Utility.Business.Client.SiteSection siteSection = new Utility.Business.Client.SiteSection(SiteSectionId);
            var fullclient = client.ClientId + "_" + client.FolderForAkamai;
            var fullsitesection = siteSection.SiteSectionId + "_" + siteSection.FolderForAkamai;
            var destination = "/Clients/" + fullclient + "/" + fullsitesection + "/" + "Email" + "/" + "Images" + "/" + "Test/";
            Utility.Business.FTPUpload ftpUpload = new Utility.Business.FTPUpload();
            ftpUpload.CreateFTPDirectory(destination);
            return Json(null);
        }

        [OutputCache(Duration = 360, VaryByParam = "path")]
        public ActionResult Image(string path)
        {

            Utility.Business.Client.Client client = new Utility.Business.Client.Client(ClientId);
            Utility.Business.Client.SiteSection siteSection = new Utility.Business.Client.SiteSection(SiteSectionId);
            var fullclient = client.ClientId + "_" + client.FolderForAkamai;
            var fullsitesection = siteSection.SiteSectionId + "_" + siteSection.FolderForAkamai;
            var destination = "/Clients/" + fullclient + "/" + fullsitesection + "/" + "Email" + "/" + "Images" + "/" + "Test/";
            WebClient url = new WebClient();
            var physicalPath = "http://qa.cdn.marketingadvocate.net" + destination + path;
            Stream stream = url.OpenRead(physicalPath);
            //var physicalPath = Server.MapPath(path);

            const string contentType = "image/png";
            return File(stream, contentType);

        }

    }
}

This is my view:
 </div>
                <link href="http://cdn.kendostatic.com/2013.3.1119/styles/kendo.common.min.css" rel="stylesheet" />
                <link href="http://cdn.kendostatic.com/2013.3.1119/styles/kendo.rtl.min.css" rel="stylesheet" />
                <link href="http://cdn.kendostatic.com/2013.3.1119/styles/kendo.default.min.css"
                    rel="stylesheet" />
                <link href="http://cdn.kendostatic.com/2013.3.1119/styles/kendo.dataviz.min.css"
                    rel="stylesheet" />
                <link href="http://cdn.kendostatic.com/2013.3.1119/styles/kendo.dataviz.default.min.css"
                    rel="stylesheet" />
                <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
                <script src="http://cdn.kendostatic.com/2013.3.1119/js/kendo.all.min.js"></script>
                <script src="http://cdn.kendostatic.com/2013.3.1119/js/kendo.timezones.min.js"></script>
                @(Html.Kendo().Editor()
      .Name("editor")
      .HtmlAttributes(new { style = "width: 585px;height:400px" })
      .Tools(tools => tools
          .Clear()
          .Bold().Italic().Underline().Strikethrough()
          .JustifyLeft().JustifyCenter().JustifyRight().JustifyFull()
          .InsertUnorderedList().InsertOrderedList()
          .Outdent().Indent()
          .CreateLink().Unlink()
          .InsertImage()
          .SubScript()
          .SuperScript()
          .TableEditing()
          .ViewHtml()
          .Formatting()
          .FontName()
          .FontSize()
          .FontColor().BackColor()

      )

      .Value(@<text>
                </text>)
.ImageBrowser(ImageBrowser => ImageBrowser
     .Upload("Upload", "ImageBrowser")
.Read("Read", "ImageBrowser")
.Create("Create", "ImageBrowser")
.Thumbnail("Thumbnail", "ImageBrowser")
     )


)


Thanks
Dimiter Madjarov
Telerik team
 answered on 25 Nov 2013
1 answer
215 views
Hi,

Attended your webinar yesterday and they said that the new responsive controls would integrate perfectly with bootstrap 3. I was just wondering, I actually started a new Asp.net mvc project with the bootstrap 3 template last friday, and integrated KendoUI with it. I found it to be a bit of a hassle because of the different jquery version. Boostrap is currently at jquery-2.0.3 whereas my current Kendo version is at jquery-1.9.1.
What is the best practice when including these files in the master _Layout.cshtml file? Luckily, Bootstrap 3 is backwards compatible down to jquery-1.9.0. Will the new responsive version ship with a newer jquery version?
Alex Gyoshev
Telerik team
 answered on 25 Nov 2013
2 answers
154 views
If I have a parent menu item which has a child menu item that points to an action, the action has an access control that is the user needs to have certain role. As Kendo documentation says, if the user doesn't have that role, the menu will automatically not show. My question is: I understand the child menu item will not show; what about the parent menu? Will it still show or not?

Thanks.
Y.L.
Top achievements
Rank 1
 answered on 22 Nov 2013
1 answer
360 views
Hi,
I've been trying out the new Map widget and, whilst the map displays fine, I can't seem to get any markers to display on the map.

I've used the MVC Wrapper markup below (based on the GeoJSON example on your demos web page). I've tried to figure out the correct configuration  for adding a single test marker but, as I say, nothing shows up. Are markers supported in the beta version or can you see anything wrong in my markup?

@(Html.Kendo().Map()
.Name("map")
.Center(37.5, 110)
.Zoom(3.4)
.Layers(layers => {
layers.Add()
.Style(style => style.Fill(fill => fill.Opacity(0.7)))
.Type(MapLayerType.Shape)
.DataSource(dataSource => dataSource
.GeoJson()
.Read(read => read.Url(Url.Content("~/Content/Countries.json")))
);
})
.Events(events => events
.ShapeCreated("onShapeCreated")
.ShapeMouseEnter("onShapeMouseEnter")
.ShapeMouseLeave("onShapeMouseLeave")
.ShapeClick("onShapeClick")
)
.Markers(markers => {
markers.Add()
.Shape(MapMarkerShape.Circle)
.Position(37.1, 110.1)
.Size(20)
.Color("Red");
})
)

Thanks, Ian
Hristo Germanov
Telerik team
 answered on 22 Nov 2013
1 answer
248 views
I'm currently working on converting a Silverlight project into an MVC project.  
I'm working on a grid where the number of columns and the names of the columns are not known at design-time.  
Each column in the grid, other than the first one, should contain a checkbox.  I'd like each checkbox to be incell editable with a batch save option.
A screenshot of the current Silverlight version is attached.

I'm having a lot of difficulty getting this to work.  I tried a few different ways by using examples found in this forum.  
http://www.kendoui.com/forums/kendo-ui-complete-for-asp-net-mvc/grid/kendo-mvc-grid---data-binding-to-dynamic-object-model.aspx

So, my question is, is there a way to make a grid truly dynamic that also works with batch/incell editing?

Thanks.

Daniel
Telerik team
 answered on 22 Nov 2013
1 answer
70 views
Hi,

I am turning on Mobile.Phone mode in MVC web application. (trying Adaptive Widgets)
The javascript error e._addUserEvents occurred when navigate between view especially in Day and Week view. Month and Agenda view no error.
The scheduler is read only.

How to solve the issue, kindly assists.

Kendo UI Complete v2013.3.1119
MVC 4.0

jquery-2.0.3.js
kendo.all.min.js
kendo.aspnetmvc.min.js
kendo.common-bootstrap.min.css
kendo.mobile.common.min.css
kendo.bootstrap.min.css
Rosen
Telerik team
 answered on 22 Nov 2013
1 answer
120 views
If I used a LINQ join that returns anonymous objects, in the manner found in

http://stackoverflow.com/questions/5808116/linq-how-to-do-join-using-the-linq-extension-method-style-on-multiple-fields

How could I set that as my grid's model?
@(Html.Kendo().Grid<*what do I put here?*>()
      .Name("grid")
      .DataSource(dataSource => dataSource // Configure the grid data source
          .Ajax() // Specify that ajax binding is used
          .Read(read => read.Action(...)
       )
    ...more configs...
)
Petur Subev
Telerik team
 answered on 22 Nov 2013
1 answer
211 views
I'm trying to filter a Kendo Grid for sales between a start date and end date but have been unable to do so with filter.push gt and lt.  Any help would be appreciated.

            var dFrom, dTo;
            var dateCriteria = $("#searchCustomerOrder").val();
            var dateFrom = new Date(0);
            var dateTo = new Date(0);
            var pos = dateCriteria.indexOf("-");
            if (pos > -1)
            {
                dFrom = searchCustomerOrder.substring(0, pos);
                dTo = searchCustomerOrder.substring(pos + 1);
                if (dFrom && dTo)
                {
                    dateFrom = new Date(dFrom);
                    var secs = dateFrom.getSeconds();
                    if (secs == 0) {
                        var milli = dateFrom.getMilliseconds();
                        milli = milli - 1;
                        dateFrom.setMilliseconds(milli);
                    }

                    dateTo = new Date(dTo);
                    secs = dateTo.getSeconds();
                    if (secs == 0) {
                        milli = dateTo.getMilliseconds();
                        milli = milli + 86399999;
                        dateTo.setMilliseconds(milli);
                    }                  
                    if (!isNaN( dateFrom.getTime()) && !isNaN( dateTo.getTime()))
                    {
                        $datefrom = dateFrom;
                        $dateTo = dateTo;
                        $filter.push(
                            { field: "OrderDate", operator: "gt", value: $datefrom });
                        $filter.push(
                            { field: "OrderDate", operator: "lt", value: $dateTo });
                    }
                }
            }
Mark
Top achievements
Rank 1
 answered on 21 Nov 2013
14 answers
1.0K+ views
Folks,

If I start new development by MVC 5  with VS 2013 Preview that has production licence.
Will I have major problems to integrate Kendo UI  for MVC 5 project when using latest internal build  Kendoui.aspnetmvc.2013.2.823.commercial.zip or should I wait for the Q3?, which will support VS 2013 MVC 5?

Alexander
Alexander K
Top achievements
Rank 1
 answered on 21 Nov 2013
1 answer
87 views
I am using the grid to edit dates, I am in Australia, and when editing 2013-11-9 it becomes 2013-9-11 I have read many posts about this but cant seem to fix it. 
I am using the MVC wrappers. 
I have tried using dateformat on the grid field, i have set globalization in webconfig, I have added kendo.culture.en-AU.min.js script (not sure if that is necessary in mvc wrappers) but cant get it to work.
Thanks

I should add, my date type is nullable of date
Thanks
Petur Subev
Telerik team
 answered on 20 Nov 2013
Narrow your results
Selected tags
Tags
+? more
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?