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

Razor 如何从2sxc内容字段输出页面ID而不是页面URL?,razor,dotnetnuke,2sxc,Razor,Dotnetnuke,2sxc,我有一个2sxc内容模块,它使用C Razor作为模板。在我的内容类型中,有一个名为Link的字段,该类型是一个链接,配置为仅允许用户从下拉列表中选择DNN页面 当用户从下拉列表中选择一个页面时,它会显示类似于page:38的内容,其中38是DNN选项卡ID 在我的C razor模板中,我放入@Content.Link,它将输出类似domain.com/our-services的内容。我们的服务是与选项卡ID 38关联的URL 我正在构建一个只输出页面ID的东西。因此,我希望它输出页面ID,而不

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

当用户从下拉列表中选择一个页面时,它会显示类似于page:38的内容,其中38是DNN选项卡ID

在我的C razor模板中,我放入@Content.Link,它将输出类似domain.com/our-services的内容。我们的服务是与选项卡ID 38关联的URL

我正在构建一个只输出页面ID的东西。因此,我希望它输出页面ID,而不是@Content.Link output/our services


用c剃须刀怎么做?

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

如果不想自动解析,则必须使用Content.GetLink、convertLinks:false获取原始字符串,然后使用substring或regex提取ID


另请参见

@iJungleBoy,我试图使用上面的答案来实现这一点,但未能实现。无论我如何使用.Get,我都会得到一个空引用异常。我在2sxc 11.3上;什么时候加入的?它可能在11.3之后修复吗

这就是我在玩的东西,也许你能发现我的错误?在下面的代码中,.LinkedPages是一个实体字段,允许多个具有名为Page的超链接字段类型的其他内容类型;您可以在下面看到前3项的结果

代码:

我还尝试了许多变化,如:

@A实体。获取。。。 @pg作为对象。Getname:Page。。。 @pg.Getname:Page,dontRelyOnParameterOrder:Constants.RandomProtectionParameter,语言:en-us,convertLinks:false 还有很多其他的,但总是得到空引用错误,即使根据文档它看起来是正确的。想法

对于此变更/测试 @pg.Getname: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 , CallSite , Object , String , Boolean ) at 
System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, 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

为了简化,我使用了一个例子,其中Link字段只是一个正则字段。在我的例子中,我实际上使用的是子实体,所以我在我的内容模块中循环浏览链接列表。我尝试了你建议的代码,用我的子实体循环pathwayItem中使用的变量交换内容,但我不断得到错误,无法对空引用执行运行时绑定任何想法?升级到11.11.4后,它可以工作。我相信Get,特别是带有convertLinks:false的重载是相当新的。还有一个命令我相信是实体…GetBestValuename,…`但是它被弃用了,所以它不再列在文档中。我建议你升级。你是对的,升级成功了。失去这么多时间做实验和报道让我很沮丧,但我很高兴这一切都过去了@pg.Getname:Page,convertLinks:false现在返回预期值:Page:93
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
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 , CallSite , Object , String , Boolean ) at 
System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, 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