在2sxc强类型模式下,如何从超链接字段获取页面/文件ID的Int值?
解决2sxc Hyperlink字段快速获取页面/文件ID的问题
你可以直接利用2sxc内置的IHyperlink类型提取ID,无需手动解析字符串,具体两种实现方式如下:
方法1:通过类型转换获取ID
使用Get<IHyperlink>()方法获取链接对象,直接访问其Id属性即可拿到原始ID:
@foreach (var aPage in pages) { var link = aPage.Get<IHyperlink>("PageLink"); <pre> PageLink ID: @link.Id </pre> }
如果是页面链接,link.Id返回页面ID;如果是文件链接,则返回文件ID,自动处理page:xx或file:xx的存储格式。
方法2:强类型模型直接访问(推荐)
若你的内容类型已生成强类型模型,Hyperlink字段对应的属性本身就是IHyperlink类型,直接调用Id属性即可:
@foreach (var aPage in pages) { <pre> PageLink ID: @aPage.PageLink.Id </pre> }
这和你用@aPage.PageLink直接输出URL的逻辑一致——IHyperlink对象在直接输出时会自动转换为完整URL,而Id属性则对应存储的原始ID。
补充:.Int()方法无效的原因
.Int()方法仅会尝试将字段的显示值转换为整数:Hyperlink字段的默认显示值是解析后的完整URL,而用.Get()获取的原始存储字符串page:34也不符合整数格式,因此.Int()无法正确解析,返回默认值0。而IHyperlink是2sxc为链接字段专门设计的类型,内部已完成原始格式的解析,能直接提取ID。
内容的提问来源于stack exchange,提问作者Jeremy Farrance
相关产品推荐
相关产品推荐

