如何解决如何从 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。
@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 举报,一经查实,本站将立刻删除。