Umbraco 12+基于自定义参数构建动态左侧导航查询咨询
Umbraco 12 动态左侧导航实现方案
你只需要先获取当前页面的leftNavigationSection值,将其作为查询条件替换掉硬编码的分区名称即可,具体修改如下:
获取当前页面的导航分区值:
用你提到的Model.Value("leftNavigationSection")获取当前页面所属分区,同时增加空值判断避免空引用问题。调整查询逻辑:
把硬编码的"Human Resources"替换为动态获取的变量,同时合并多个Where条件让代码更简洁。
修改后的完整代码:
@{ // 获取当前页面的导航分区值并做空值处理 var currentSection = Model.Value<string>("leftNavigationSection"); var selectLeftNav = Enumerable.Empty<ContentPage>(); if (!string.IsNullOrEmpty(currentSection)) { selectLeftNav = Model.Ancestor() .Children<ContentPage>() .Where(x => x.IsVisible() && x.ShowOnLeftNavigation == true && x.LeftNavigationSection == currentSection); } } <ul class="nav left-nav-items"> @foreach (var item in selectLeftNav) { <li class="nav-item"> <a href="@item.Url()">@item.Name</a> </li> } </ul>
补充说明:
- 空值判断逻辑:如果当前页面未设置导航分区,导航会显示为空,你可以根据需求调整这种场景的处理(比如显示默认分区或提示文本)。
- 合并
Where条件能让代码更紧凑,Linq会自动优化查询性能。 - 全程使用强类型模型属性匹配,不需要依赖Umbraco的GUID查询构建器,完全符合你的要求。
内容的提问来源于stack exchange,提问作者Yaco Zaragoza
相关产品推荐
相关产品推荐

