Загрузка пользовательского интерфейса кендо внутри сетки

Я пытаюсь реализовать Kendo UI Grid с Kendo Upload внутри сетки. Пока я использую ASP.NET MVC, я не использую обертки Telerik MVC. Я пытаюсь сделать это без них.

Проблема, с которой я сталкиваюсь, заключается в том, что IEnumerable HttpPostedFileBase имеет значение null, когда он отправляет обратно в мой метод Action.

JavaScript:

$(document).ready(function () {

        var dsGalleryItemFile = new kendo.data.DataSource({
            transport: {
                read:   "@Url.Content("~/Intranet/GalleryItemFile/ListFiles/")@Model.galleryItemID",
                update: {
                    url: "@Url.Content("~/Intranet/GalleryItemFile/UpdateFile")",
                    type: "POST"
                },
                destroy: {
                    url: "@Url.Content("~/Intranet/GalleryItemFile/DeleteFile")",
                    type: "POST"
                },
                create: {
                    url: "@Url.Content("~/Intranet/GalleryItemFile/CreateFile/")@Model.galleryItemID",
                    type: "POST"
                }
            },
            // determines if changes will be send to the server individually or as batch
            batch: false,
            schema: {
                model: {
                    id: "fileID",
                    fields: {
                        fileID: {
                            editable: false,
                            nullable: true
                        },
                        filename: {},
                        fileType: { defaultValue: {fileTypeID: 1, fileType: "Web JPEG"} },
                        fileType: {},
                        width: { type: "number" },
                        height: { type: "number" },
                        }
                    }
                }
        });

        $("#gvGalleryItemFile").kendoGrid({
            columns: [{
                field: "filename",
                title: "Filename" 
            }, {
                field: "filepath",
                title: "File Upload",
                editor: fileUploadEditor//,
                //template: "<img src='#=filepath.filepath#' />"
            }, {
                field: "fileType",
                title: "File Type",
                editor: fileTypeDropDownEditor,
                template: "#=fileType.fileType#",

            }, {
                field: "width",
                title: "Width"
            }, {
                field: "height",
                title: "Height"
            }, {
                command: ["edit", "destroy"]
            }],
            editable: { mode: "inline" },
            toolbar: ["create"],
            dataSource: dsGalleryItemFile
        });


    });

    function fileTypeDropDownEditor(container, options) {
        $('<input required data-text-field="fileType" data-value-field="fileTypeID" data-bind="value:' + options.field + '"/>')
            .appendTo(container)
            .kendoDropDownList({
                autoBind: false,
                dataSource: {
                    transport: {
                        read: "@Url.Content("~/Intranet/FileType/ListFileTypes")"
                    }
                }
            });
    }

    function fileUploadEditor(container, options) {
        $('<input type="file" name="fileUpload" id="fileUpload" />')
            .appendTo(container)
            .kendoUpload({
                async: {
                    saveUrl: "@Url.Content("~/Intranet/GalleryItemFile/UploadFile")"
                },
                complete: onUploadComplete
            });
    }

Действие МВК:

[HttpPost]
    public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> uploadedFiles)
    {
        if (uploadedFiles != null)
        {
            foreach (var thisFile in uploadedFiles)
            {
                string newFileName = Path.GetFileName(thisFile.FileName).Replace(" ", "");
                var physicalPath = Path.Combine(Server.MapPath("~/Areas/Gallery/Content/GalleryImages"), newFileName);
                thisFile.SaveAs(physicalPath);

            }
            return Content("");
        }
        else
        {
            return Content("Error");
        }

    }

person Lrayh    schedule 11.02.2014    source источник


Ответы (1)


Попробуйте назвать параметр аргумента в сигнатуре метода действия так же, как атрибут имени ввода, который вы превращаете в виджет загрузки.

В твоем случае

public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> fileUpload)
person Petur Subev    schedule 11.02.2014
comment
Отлично, все еще немного новичок в MVC и кендо. Спасибо за помощь. - person Lrayh; 12.02.2014
comment
Думаете, вы не знаете, как вернуть имя файла в сценарий, чтобы я мог сохранить его при редактировании строки? - person Lrayh; 12.02.2014
comment
Вы можете отправить JSON обратно клиенту в качестве ответа от сервера. Внутри JSON вы можете добавить это имя файла, json будет доступен внутри события обратного вызова успеха. docs.telerik.com/kendo-ui/api/web/ загрузить#события-успешно - person Petur Subev; 12.02.2014