Vì vậy, tôi nhận ra đây là câu hỏi khá cũ, nhưng gần đây tôi đã tìm ra cách thực hiện điều này một cách đáng tin cậy. Trong khi câu trả lời khác ở đây chắc chắn sẽ hiển thị các tập tin, nó không thực sự dây nó lên đến bất kỳ sự kiện (cụ thể là "loại bỏ" sự kiện). Ngoài ra, thay vì tự thiết lập tất cả những điều này, tôi nghĩ tôi muốn Kendo làm tất cả những công việc bẩn thỉu thực sự.
Lưu ý, điều này chỉ áp dụng nếu tệp tải lên của bạn không được đặt thành tự động đồng bộ hóa. Nếu bạn sử dụng tính năng tự động tải lên, bạn có thể tìm thấy ví dụ trong tài liệu Kendo ở đây: http://docs.kendoui.com/api/web/upload#configuration-files
Vì vậy, dù sao, chúng ta hãy giả sử chúng ta có một đầu vào tập tin mà chúng tôi đã thực hiện thành một Kendo Tải lên:
<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
});
}
Sau đó, chúng tôi chỉ cần lấy thông tin về các tệp vào jQuery của chúng tôi. Tôi thích mứt nó vào chuỗi JSON trong các lĩnh vực ẩn, nhưng bạn có thể làm điều đó tuy nhiên bạn muốn.
Dưới đây là một ví dụ sử dụng HtmlHelpers MVC và JSON.NET Newtonsoft của (tôi không sử dụng Razor, nhưng bạn sẽ nhận được các ý tưởng chung):
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));
}
Lưu ý, định dạng có vô cùng quan trọng . Chúng tôi buộc để phù hợp với cấu trúc của đối tượng JavaScript Kendo được mong đợi:
{
relatedInput : sourceInput,
fileNames: [{ // <-- this is the collection we just built above
name: "example.txt",
extenstion: ".txt",
size: 1234
}]
}
Vì vậy, sau đó tất cả những gì còn lại để làm là đặt nó tất cả cùng nhau.Về cơ bản, chúng ta sẽ tái tạo onSelect
chức năng từ của Kendo nội 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");
}
}
});
Và đó là khá nhiều đó!
Cảm ơn bài đăng của bạn! Vui lòng không sử dụng chữ ký/khẩu hiệu trong bài đăng của bạn. Hộp người dùng của bạn được tính là chữ ký của bạn và bạn có thể sử dụng tiểu sử của mình để đăng bất kỳ thông tin nào về bản thân bạn muốn. [Câu hỏi thường gặp về chữ ký/khẩu hiệu] (http://stackoverflow.com/faq#signatures) –
Ồ, xin lỗi về điều đó! Cảm ơn bạn đã xóa nó. – dwhite
Cảm ơn sự giúp đỡ! – SFAgitator