如何在Umbraco 8中访问Web Models Link获取正确导航URL
Umbraco 8迁移:导航菜单正确获取Link URL的解决方案
问题分析
从Umbraco 7迁移到Umbraco 8时,导航菜单名称可正常获取,但menuItem.Url()返回的URL不符合预期;调试发现节点包含Link成员,但直接访问menuItem.Link提示成员不存在,尝试的代码出现空引用错误。
修正步骤及代码示例
确认属性别名
先在Umbraco后台的文档类型定义中,找到菜单节点对应的链接属性的别名(注意:别名区分大小写,通常默认是小写,比如link,而非显示名称)。正确获取Link对象
使用Value<T>方法从menuItem中获取Umbraco.Web.Models.Link对象,替换成实际的属性别名,同时修正变量名错误:
@{ // 替换"link"为你的链接属性实际别名 var umbracoLink = menuItem.Value<Umbraco.Web.Models.Link>("link"); } @if (umbracoLink != null) { var linkUrl = umbracoLink.Url; // 处理链接目标,默认_self var linkTarget = string.IsNullOrWhiteSpace(umbracoLink.Target) ? "_self" : umbracoLink.Target; } <li class="nav-level-1__item"> <a href="@linkUrl" class="nav-level-1__link" data-tsat="nav-menu_item" data-nav-title="@menuItem.Name" target="@linkTarget"> @menuItem.Name </a> </li>
常见错误排查
- 变量名错误:之前代码中使用
menuLink而非当前遍历的menuItem对象,导致无法正确获取属性值 - 属性别名错误:若别名与后台定义不符,
Value<T>会返回null,触发空引用 - 未设置Link属性:部分菜单节点可能未配置Link值,需添加null判断避免报错
内容的提问来源于stack exchange,提问作者Macca Williams
相关产品推荐
相关产品推荐

