2sxc技术咨询:如何通过唯一标识符访问ADAM文件
关于2sxc ADAM文件ID获取与URL加载的问题
场景说明
已配置ADAM字段MyDocument,支持用户上传图片等文件。列表视图中,用户点击链接可打开详情视图(链接格式如mysite.com/mytab/detailsforfile/fileId),详情视图需解析fileId并加载对应文件。
核心问题
- 如何获取ADAM文件的唯一ID,用于后续加载文件?
- 如何通过该ID获取文件的URL?
- 是否只能使用DNN原生文件ID(如123)?2sxc或ADAM是否有专属ID?
代码示例
列表视图原代码
@foreach(var car in eCars) { <div> <strong>@car.Name</strong> <img class="img-fluid" src="@car.carImageOne"> <a href="@("/whatever/" + IDFORTHISIMAGE)">查看完整图片...</a> <img class="img-fluid" src="@car.carImageTwo"> <a href="@("/whatever/" + IDFORTHISIMAGE)">查看完整图片...</a> </div> }
详情视图原代码
@{ var qsImageId = Request.QueryString["whatever"]; //转换并验证查询字符串的整数类型 var imageURL = ??; // 如何通过ID获取文件URL? } <div> //嵌入美观框架、广告等内容 <img class="img-fluid" src="@imageURL"> </div>
解答
1. 获取ADAM文件的唯一ID
ADAM文件对象(AdamItem)同时具备两种唯一标识:
- 2sxc专属ID:
EntityId,属于2sxc体系内的独立标识,与DNN文件系统解耦 - DNN原生文件ID:
FileId,对应DNN文件系统中的文件ID
在列表视图中直接访问ADAM字段的对应属性即可获取ID,修改后的代码如下:
@foreach(var car in eCars) { <div> <strong>@car.Name</strong> <img class="img-fluid" src="@car.carImageOne"> <!-- 使用2sxc专属EntityId --> <a href="@("/whatever/" + car.carImageOne.EntityId)">查看完整图片...</a> <img class="img-fluid" src="@car.carImageTwo"> <!-- 或使用DNN原生FileId --> <a href="@("/whatever/" + car.carImageTwo.FileId)">查看完整图片...</a> </div> }
2. 通过ID获取文件URL
根据选择的ID类型,有两种实现方式:
方式一:使用2sxc专属EntityId
@{ var imageURL = ""; if(int.TryParse(Request.QueryString["whatever"], out var imageEntityId)) { // 通过EntityId获取ADAM文件对象 var adamFile = App.Adam.GetOne(imageEntityId); imageURL = adamFile?.Url ?? ""; } } <div> <!-- 嵌入美观框架、广告等内容 --> <img class="img-fluid" src="@imageURL"> </div>
方式二:使用DNN原生FileId
@using DotNetNuke.Services.FileSystem @{ var imageURL = ""; if(int.TryParse(Request.QueryString["whatever"], out var imageFileId)) { // 通过FileId获取DNN文件对象 var dnnFile = FileManager.Instance.GetFile(imageFileId); if(dnnFile != null) { imageURL = dnnFile.FileUrl; } } } <div> <!-- 嵌入美观框架、广告等内容 --> <img class="img-fluid" src="@imageURL"> </div>
3. ID选择说明
并非只能使用DNN原生FileId,2sxc的ADAM提供了专属的EntityId:
- 使用
EntityId:完全在2sxc生态内操作,无需依赖DNN文件系统API,更契合2sxc的设计逻辑 - 使用
FileId:可直接对接DNN原生文件管理能力,适合跨2sxc与DNN系统操作的场景
两者均可正常使用,根据业务需求选择即可。
内容的提问来源于stack exchange,提问作者João Gomes
相关产品推荐
相关产品推荐

