И така, осъзнавам, че въпросът е доста стар, но наскоро разбрах как да направя това надеждно. Докато другият отговор тук със сигурност ще покаже файловете, той всъщност не го свързва с нито едно от събитията (по-специално събитието „премахване“). Освен това, вместо ръчно да настройвам всичко това, реших, че бих предпочел Kendo да свърши цялата истинска мръсна работа.
Имайте предвид, че това се прилага само ако качването на вашия файл не е настроено на автоматично синхронизиране. Ако използвате функцията за автоматично качване, можете да намерите примери в документацията на Kendo тук: http://docs.kendoui.com/api/web/upload#configuration-files
Така че както и да е, нека приемем, че имаме въведен файл, който сме направили в Kendo Upload:
<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
на Kendo:
$(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