WTM 多附件上传使用心得

WTM多附件上传初基本使用步奏:

1.创建一个新的表格 <TableA>,用于记录多附件上传的外键,一个外键指向拥有多附件的主表<MasterA>ID,一个外键指向FileAttachment 的ID

  public class TableA : TopBasePoco, ISubFile
    {
        [Display(Name = "MasterA")]
        public Guid MasterAId { get; set; }
        public MasterA  MasterA { get; set; }
        //ISubFile定义的字段
        public Guid FileId { get; set; }
        public FileAttachment File { get; set; }
        public int order { get; set; }
    }

2.。在主表<MasterA>中添加新表格 关于<TableA> 的list

public List<TableA> TableAList { get; set; }

3. 在界面使用

     <wt:multiupload field="Entity.TableAList" upload-type="AllFiles"  num-file-once="10"/>

 

在实际使用时遇到的问题:

WTM多附件上传时,在界面删除附件后保存前,实际在硬盘和FileAttachment 中没有删除,WTM是在保存后才会删除多余的文件了。WTM源代码的做法是在界面将多余的文件记录在DeleteFilesIds 这个file 里面。然后在CURD 时操作实际的删除。[源码链接]

/// <summary>
        /// 添加,进行默认的添加操作。子类如有自定义操作应重载本函数
        /// </summary>
        public virtual void DoAdd()
        {
            DoAddPrepare();
            //删除不需要的附件
            if (DeletedFileIds != null)
            {
                foreach (var item in DeletedFileIds)
                {
                    FileAttachmentVM ofa = new FileAttachmentVM();
                    ofa.CopyContext(this);
                    ofa.SetEntityById(item);
                    ofa.DoDelete();
                }
            }
            DC.SaveChanges();
        }

于是会产生bug,如果用户删除了文件后,并没有保存就关闭,这时候无法实际删除文件。

 

我的解决方案:

为此我做的改动是,修改TagHelper,在TagHelper 中增加ajax call ,使得在界面删除时,直接调用 '/api/_file/DeletedFile/' + fileid, 去删除实际的文件。【MultiUpload 源码】

function {Id}DoActualDelete(fileid){{
        $.ajax({{
            type: 'get',
            url: '/api/_file/DeletedFile/' + fileid,
            success: function () {{
                console.log('deleted');
            }},
            error: function () {{
                console.log('failed');
            }}
        }});
    }}

当使用修改后的TagHelper时,要注意在增删查改的时候要将 DeletedFields 设为null, 这样就不会触发WTM 的code 再去删除多一遍而引发错误了。

                vm.DeletedFileIds = null;
                vm.DoAdd();

 在界面使用你修改过的Tag helper

     <yourcusttaghelper:multiupload field="Entity.TableAList" upload-type="AllFiles"  num-file-once="10"/>

 

最后2021年1月23日更新:此问题已经在Net5版本得到完美解决。

 

 

 

posted @ 2021-01-15 11:10  kkyuu  阅读(1000)  评论(0)    收藏  举报