You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Umbraco 9控制器中如何让rootContent支持Intellisense属性提示

问题原因

UmbracoHelper.ContentAtRoot() 默认返回 IPublishedContent 接口类型,尽管运行时实例是Models Builder生成的强类型模型,但编译阶段IDE只能识别接口预定义的成员,无法识别你自定义文档类型的属性,因此Intellisense不会提示对应属性,只有调试时拿到运行时实际类型才能查看所有属性。

解决方法

将返回结果显式转换为根节点对应的强类型模型即可,Models Builder会根据后台配置的文档类型自动生成对应强类型类,操作如下:

  • 先确认根节点对应文档类型生成的强类型类名,默认和文档类型别名一致,例如根文档类型别名为SiteRoot时,生成的类即为SiteRoot,可直接在项目的Models目录下查找Models Builder生成的文件确认类名和命名空间。
  • 修改Index方法中获取rootContent的代码,使用OfType<T>()过滤并转换类型,转换后IDE可直接识别强类型,Intellisense会自动提示所有自定义属性:
public override IActionResult Index()
{     
    // 将<Root>替换为你项目中根文档类型对应的实际强类型类名
    var rootContent = UmbracoHelper.ContentAtRoot().OfType<Root>().SingleOrDefault();
    // 增加空值判断避免空引用异常
    var children = rootContent?.ChildrenForAllCultures.ToList() ?? new List<IPublishedContent>();
    // 注意原代码中return使用的contentPage变量未定义,需自行补全对应赋值逻辑
    return View("~/Views/SearchResult.cshtml", contentPage);
}
  • 额外说明:
    • 优先用OfType<T>()而非直接强转,会自动过滤类型不匹配的节点,多站点场景下也能准确拿到目标类型的根节点,避免类型转换报错
    • 若找不到生成的强类型类,可进入Umbraco后台「设置」-「Models Builder」页面触发生成模型,确认项目已正确引用生成的模型文件
    • 若使用Models Builder的源码自动生成模式,后台文档类型变更后强类型类会自动同步,无需手动维护

不想每次手动获取根节点的话,也可以通过依赖注入直接拿到当前请求对应的强类型根节点模型,多站点场景下匹配精度更高。

内容的提问来源于stack exchange,提问作者rokdbest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:21:34