微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 2sxc 内容字段输出页面 ID 而不是页面 URL?

如何解决如何从 2sxc 内容字段输出页面 ID 而不是页面 URL?

我有一个使用 C# Razor 作为模板的 2sxc 内容模块。在我的内容类型中,我有一个名为“链接”的字段,该类型是一个配置为仅允许用户从下拉列表中选择 DNN 页面链接

用户从下拉列表中选择一个页面时,它会输入类似“page:38”的内容,其中“38”是 DNN 标签 ID。

在我的 C# razor 模板中,我放置了 @Content.Link,它会输出类似 domain.com/our-services 的内容。 (our-services 是与标签 ID 38 关联的 URL)。

我正在构建一些我想要实际只输出页面 ID 的东西。所以不是@Content.Link 输出/our-services,我希望它输出页面ID“38”。

如何在 c# razor 中执行此操作?

解决方法

绝对的。假设您的字段名为 Link,那么到目前为止您正在执行 @Content.Link。这将自动解析链接。

如果不想自动解析,则必须使用Content.Get("Link",convertLinks: false)获取原始字符串,然后使用子字符串或正则表达式提取ID。

另见https://docs.2sxc.org/api/dot-net/ToSic.Sxc.Data.DynamicEntity.html#ToSic_Sxc_Data_DynamicEntity_Get_System_String_System_String_System_String_System_Boolean_

,

@iJungleBoy,我尝试使用您上面的答案使其正常工作,但未能成功。无论我如何使用 .Get(),我都会得到一个空引用异常。我在 2sxc 11.3 上; .Get() 是什么时候添加的?它可能会在 11.3 之后修复吗?

这是我正在玩的东西,也许你能发现我的错误?在下面的代码中,.LinkedPages 是一个实体字段,它允许多个具有名为“Page”的超链接字段类型的另一个 Content-Type;您可以在下面看到前 3 个的结果。

代码:

  foreach(var pg in pub.LinkedPages)
  {
    <p>Debug: <br>
    <span>    .Page: @pg.Page<br></span>
    <span>Get(name): @pg.Get("Page")<br></span>
    <span>  GetType: @pg.GetType()<br></span>
    <span>Get(name,convertLinks): AsEntity(pg).Get(name: "Page",language: "en",convertLinks: false)</span>
    </p>
  }

没有错误的结果:

Debug:
1.         .Page: https://staging.com/products/fiber-fed-pulsed-plasma-thruster-fppt
2.  .Get("Page"): https://staging.com/products/fiber-fed-pulsed-plasma-thruster-fppt
3.    .GetType(): ToSic.Sxc.Data.DynamicEntity

我也尝试了许多变体,例如:

  • @AsEntity(pg).Get(...)
  • @((pg as object).Get(name: "Page",...
  • @pg.Get(name: "Page",dontRelyOnParameterOrder: Constants.RandomProtectionParameter,language: "en-us",convertLinks: false)

和相当多的其他人,但即使根据文档看起来正确,也总是会出现空引用错误。想法?

对于这个变体/测试 @pg.Get(name: "Page",convertLinks: false)

这里是完整的错误:

Error: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 
Cannot perform runtime binding on a null reference at CallSite.Target(Closure,CallSite,Object,String,Boolean ) at 
System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site,T0 arg0,T1 arg1,T2 arg2) at 
CallSite.Target(Closure,T2 arg2) at 
ASP._Page_Portals_0_2sxc_Content__CUA__PubPaper__List__basic_cshtml.Execute() 
in c:\{siteroot}\Portals\0\2sxc\Content\_CUA\_PubPaper__List--basic.cshtml:line 98 at 
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() at 
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext,TextWriter writer,WebPageRenderingBase startPage) at 
ToSic.Sxc.Engines.RazorEngine.Render(TextWriter writer) 
in C:\Projects\2sxc\2sxc\Src\Dnn\ToSic.Sxc.Razor\Engines\Razor\RazorEngine.cs:line 67 at 
ToSic.Sxc.Engines.RazorEngine.RenderTemplate() 
in C:\Projects\2sxc\2sxc\Src\Dnn\ToSic.Sxc.Razor\Engines\Razor\RazorEngine.cs:line 77 at 
ToSic.Sxc.Engines.EngineBase.Render() 
in C:\Projects\2sxc\2sxc\Src\Sxc\ToSic.Sxc\Engines\EngineBase.cs:line 150 at 
ToSic.Sxc.Blocks.BlockBuilder.Render() 
in C:\Projects\2sxc\2sxc\Src\Sxc\ToSic.Sxc\Blocks\BlockBuilder_Render.cs:line 57

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。