12

我目前正在使用 Kendo UI 使用 MVC3 和 Razor 和实体框架将文件上传到数据库。我在我网站的几个区域都运行良好,除非我需要将其限制为仅允许单个上传。我有多个设置为false,我需要禁止多项选择,但仍然允许用户多次单击选择按钮来添加文件,这违反了数据库中该字段的要求。

我尝试了一些我认为在他们的网站上找到的建议,但它们指的是当前请求中发送的当前选定项目,而不是整个上传列表(见下图)。

<script type="text/javascript">
  function singleFile(e) {
    var files = e.files;
    if (e.files.length > 1) {
      alert('Only one file may be uploaded, cancelling operation...');
      e.preventDefault();
    }
  }
</script>
@(Html.Kendo().Upload()
  .Name("resumeAttachments")
  .Multiple(false)
  .Async(async => async
      .Save("ResumeSave", "File")
  )
  .Events(c => c
      .Upload("resumeOnUpload")
  )
  .Events(c => c
      .Success("resumeOnSuccess")
  )
  .Events(c => c
      .Complete("singleFile")
  )
)

文件列表 - 允许单独上传多个文件

4

5 回答 5

10

在我被要求防止多次上传后,我偶然发现了这个页面。
如果正确完成,“multiple”设置为 FALSE 就可以正常工作。

(虽然您可以使用 Kendo Razor 语法,但请注意,当您查看页面源代码时.Kendo () 实际上已转换为 .kendoUpload

因此我更喜欢javascript中的这种语法(在@using之后):

@using Kendo.Mvc.UI;

<script type="text/javascript">

$(document).ready(function() {
    $("#files").kendoUpload({"multiple":false,
        async: {
            saveUrl: '@Url.Action("Save", "Upload", new { typeOfUploadedFile= @Model.DocName.ToString(), @proposalNo = @Model.ProposalNo.ToString(),  area = ""})',
            removeUrl: '@Url.Action("Remove", "Upload")',
            autoUpload: true
        }
    });
});   

</script>
于 2013-07-10T07:44:39.030 回答
5

在周末(以及一个长周末的假期放松)稍微思考之后,它击中了我......将singleFile函数更改为以下将禁用文件上传后的控件。

function singleFile(e) {
  var upload = $("#resumeAttachments").data("kendoUpload");

  // disables the upload after upload
  upload.disable();
}
于 2013-04-17T15:59:24.290 回答
2

您必须multiple将剑道的属性upload设置为false
例如 @(Html.Kendo().Upload().Multiple(false))

于 2015-02-28T05:23:40.193 回答
1

我知道这是一个非常古老的线程,但是我只想发布我们遇到的问题。通过异步上传添加多个将使用以下简单代码

$("#files").kendoUpload({
                        multiple : false,
                        async : {
                                saveUrl : FileUploadURL,
                                removeUrl : FileRemoveURL,
                                autoUpload : true
                                },
                        remove : onRemove,
                        success : onSuccess
                        });

但是会有一个非常烦人的行为,当用户在之前选择的文件上传仍在进行中时选择另一个文件,然后从首页看起来之前选择的文件被删除了,但实际上是之前的文件上传选定的文件仍将继续,这意味着该文件无论如何都会上传到您的服务器,您没有机会触发 removeUrl 删除未使用的文件,当然会消耗额外的带宽。

到目前为止,我们为解决这个问题所做的是在 onRemove 事件处理程序中添加一个小处理,这将调用 clearFileByUid 来停止上传。

function onRemove(e) {
        for(var removedFileId of getFileId(e)){
            //All in progress file should be stopped!
            var fileEntry=$('.k-file-progress[' + kendo.attr('uid') + '="' + removedFileId + '"]', this.wrapper)
            if(fileEntry!=null&&fileEntry.length>0){this.clearFileByUid(removedFileId);}
        }

}
function getFileId(e) {
        return $.map(e.files, function(file) {
                var fileId = file.uid;
                return fileId;
                });
}
于 2019-04-13T12:49:44.873 回答
0

另外,添加:

var dropzone = $(".k-dropzone").addClass("hide");

到 singleFile() 函数将在上传完成后隐藏选择按钮,给人一种无法再上传的非常真实的印象,因为:

.hide {
  display: none; }

是在你的css中定义的。

于 2013-04-18T14:46:03.320 回答