【问题标题】:How to bind uploaded file with ADAM to entity field correctly in 2sxc module?如何将带有 ADAM 的上传文件正确绑定到 2sxc 模块中的实体字段?
【发布时间】:2020-11-23 19:20:33
【问题描述】:

我需要以编程方式创建实体对象并用数据填充它。一个字段必须是文件类型。所以我设法创建了没有文件的实体,使用this sample of code 在 ADAM 中上传文件。但是,我似乎没有绑定它,因为它是在手动上传文件时绑定的。 当手动将文件上传到实体字段时,您可以看到类似file:421 .../asdf.docx 的内容。但是,当我从上面的链接重复代码示例时,字段包含可供选择且已上传的文件,但字段值为空。 IFile.Url 似乎通过App.Data.Update 方法写入了正确的数据,但管理面板中没有显示id。

Dictionary<string, object> fileDict = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase) {
        { "File", file.Url }
    }; // file is ToSic.Sxc.Adam.IFile, returned by SaveInAdam

App.Data.Update(entityObj.EntityId, fileDict); // entityObj is ToSic.Eav.Data.IEntity, returned by App.Data.Create

我想知道如果它没有像手动上传那样的绑定以及如何正确地做到这一点,是否会产生一些不好的后果?

【问题讨论】:

  • 你的问题和我的问题有一个很大的共同点。很难理解对象需要是什么,或者如何正确地转换或创建它,让它没有错误地存储并且正确。我希望这里有更多的指导和见解。 stackoverflow.com/questions/64762167/…

标签: dotnetnuke 2sxc


【解决方案1】:

要添加文件,您实际上是将它们添加到一个字段中(以便 UI 可以提供它们,就好像它们是由普通用户添加的一样)。查看https://docs.2sxc.org/api/dot-net/ToSic.Sxc.Dnn.Web.IDynamicWebApi.html#ToSic_Sxc_Dnn_Web_IDynamicWebApi_SaveInAdam_System_String_System_IO_Stream_System_String_System_String_System_Nullable_System_Guid__System_String_System_String_

顺便说一句:最好查看 MobiusForms 以了解它是如何完成的。

我忘了提一下:这里是文档https://docs.2sxc.org/web-api/custom-web-api-dotnet-saveinadam.html

进一步解释:

  1. SaveInAdam 会将文件放置在项目的 ADAM 文件夹中。由于可能添加了很多文件,因此只是假设该字段将是库类型 - 它不会在实体中存储任何内容,它只是自动找到属于该字段的文件夹。
  2. 如果您不想使用库功能,而实际上只是使用带有链接的单个字段,那么您还必须将“file:74”之类的术语保存到字段的值中。

【讨论】:

  • 我就是这样做的。我使用了 SaveInAdam 方法,就像您刚刚提供的那些链接一样(并且就像它以 mobius 形式完成的一样)。但它的行为仍然像我在问题中描述的那样。如果我以编程方式保存该实体对象,则文件字段返回 null 并且在管理员中我可以打开该文件字段并以编程方式查看上传的文件作为亚当窗口中的可用选项,但在那里没有选择它。就像被取消选择的文件,刚刚可用。
  • 刚刚添加了说明如何做到这一点。
  • 非常感谢! )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 2019-12-04
相关资源
最近更新 更多