2sxc 字段必须唯一的实体

2sxc Entity with a field that must be unique

用户创建一个 Post(实体)并定义一个 UrlKey 字段(输入类型 url-路径)

我想防止重复值(如果此类型的另一个实体已经有一个具有相同内容的 url键)

有没有办法做到这一点?


* 已编辑 *

查看 2sxc 代码,我没有找到一个简单的方法来做到这一点。

我想到的一件事是创建一个 ApiController/Endpoint 我可以调用它并进行我想要的验证,但为此我需要从编辑内容更改视图(对于用户,不是管理员)。

我发现 /dist/ng-edit/main.js 中的保存被缩小了,在那里我可以更改并调用我的 controller/endpoint,但要更改以向用户显示一些反馈消息并在调用原始文件之后缩小文件端点很难。

是否有可能生成 main.js 的代码? (也许已经存在,但我找不到)

我不知道有内置的(简单的)方法可以完成此任务。但是在带有警告的视图中执行它可能是一个很好的后备选项。假设您有一个显示一组帖子的视图 (ListContent),您可以添加类似这样的内容,尽管它在事后捕捉它...

几周前我刚刚做了这样的事情,因为客户一直在 Blueimp Gallery 应用程序中重复标题。所以你可以把它放到第 4 行的 _AlbumList Bootstrap.cshtml 中,创建一些重复项(将生成重复路径的标题),你应该会看到一个修复它们的选项......所以,事后,如果有重复并且当前用户是 Super/Admin/ContentManager,然后让他们了解情况并使其易于修复:

@using DotNetNuke.Entities.Portals  @* used by IsAdminOrHost() *@
@using DotNetNuke.Entities.Users    @* used by IsAdminOrHost(), IsContentManager() *@
@{
  if(IsContentManager(Dnn.User)){
    var query = AsDynamic(Data["Default"])
      .GroupBy(x => x.Path)
        .Where(g => g.Count() > 1)
          .Select(y => y.Key)
            .ToList();
    if(query != null) {
<pre>
You have duplicates (@query.Count()), please fix them:
@foreach(var dupe in AsDynamic(Data["Default"])
  .Where(p => query.Any(x => x == p.Path)) ) {
  <span @Edit.TagToolbar(dupe)>-- @dupe.EntityId, @dupe.Path</span>
}
</pre>
    }
  }
}
@functions {
  // is the current user an Admin or Host?
  public bool IsAdminOrHost(UserInfo userInfo) {
    return userInfo.IsSuperUser || userInfo.IsInRole(PortalSettings.Current.AdministratorRoleName);
  }

  // is the current user a Content or Site Manager (or Admin+)?
  public bool IsContentManager(UserInfo userInfo) {
        return userInfo.IsInRole("Content Managers")
        || userInfo.IsInRole("Site Managers")
        || IsAdminOrHost(userInfo);
  }
}

结果应如下所示: