Итак, я понимаю, что это довольно старый вопрос, но недавно я понял, как это сделать надежно. В то время как другой ответ здесь, безусловно, отобразит файлы, на самом деле он не связывает его ни с одним из событий (в частности, с событием «удалить»). Кроме того, вместо того, чтобы настраивать все это вручную, я предпочел бы, чтобы Кендо делал всю настоящую грязную работу.
Обратите внимание, что это применимо только в том случае, если для загрузки вашего файла не установлена автосинхронизация. Если вы используете функцию автоматической загрузки, вы можете найти примеры в документации по кендо здесь: http://docs.kendoui.com/api/web/upload#configuration-files
Так или иначе, давайте предположим, что у нас есть входной файл, который мы превратили в загрузку кендо:
<input id="files" name="files" type="file" multiple="multiple" />
$(document).ready(function () {
var $upload = $("#files");
var allowMultiple = Boolean($upload.attr("multiple"));
$upload.kendoUpload({
multiple: allowMultiple,
showFileList: true,
autoUpload: false
});
}
Затем нам просто нужно получить информацию о файлах в наш jQuery. Мне нравится вставлять его в строки JSON в скрытых полях, но вы можете делать это по своему усмотрению.
Вот пример использования Mvc HtmlHelpers и JSON.NET от Newtonsoft (я не использую Razor, но вы должны получить общее представление):
if (Model.Attachments.Count > 0)
{
var files = Model.Attachments.Select(x => new { name = x.FileName, extension = x.FileExtension, size = x.Size });
var filesJson = JsonConvert.SerializeObject(files);
Html.Render(Html.Hidden("existing-files", filesJson));
}
Обратите внимание, формат здесь невероятно важен. Мы привязываемся к структуре объекта JavaScript, которую ожидает Kendo:
{
relatedInput : sourceInput,
fileNames: [{ // <-- this is the collection we just built above
name: "example.txt",
extenstion: ".txt",
size: 1234
}]
}
Итак, осталось собрать все воедино. По сути, мы собираемся воссоздать функцию onSelect
из внутренней syncUploadModule
кендо:
$(document).ready(function () {
// setup the kendo upload
var $upload = $("#files");
var allowMultiple = Boolean($upload.attr("multiple"));
var upload = $upload.kendoUpload({
multiple: allowMultiple,
showFileList: true,
autoUpload: false
}).getKendoUpload();
// initialize the files
if (upload) {
var filesJson = $("[name$='existing-files']").val();
if (filesJson) {
var files = JSON.parse(filesJson);
var name = $.map(files, function (item) {
return item.name;
}).join(", ");
var sourceInput = upload._module.element.find("input[type='file']").last();
upload._addInput(sourceInput.clone().val(""));
var file = upload._enqueueFile(name, {
relatedInput : sourceInput,
fileNames : files
});
upload._fileAction(file, "remove");
}
}
});
И это почти все!
person
valverij
schedule
20.12.2013