You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2sxc技术咨询:如何通过唯一标识符访问ADAM文件

关于2sxc ADAM文件ID获取与URL加载的问题

场景说明

已配置ADAM字段MyDocument,支持用户上传图片等文件。列表视图中,用户点击链接可打开详情视图(链接格式如mysite.com/mytab/detailsforfile/fileId),详情视图需解析fileId并加载对应文件。

核心问题

  1. 如何获取ADAM文件的唯一ID,用于后续加载文件?
  2. 如何通过该ID获取文件的URL?
  3. 是否只能使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:40:50