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

Sitefinity 10.1.6502.0:新闻详情页默认List(MVC)部件消失求助

解决Sitefinity 10.1中List(MVC)部件在新闻详情页消失的问题

我之前在Sitefinity 10.x版本里碰到过完全一样的问题——默认的List(MVC)部件会自动检测当前URL是否是详情页路由,一旦判定就会隐藏,而针对新闻部件的多部件方案(一个列表、一个详情)因为新闻部件本身有专门的显示模式配置,所以不适用通用的List部件。下面几个方案你可以试试:

方案一:自定义List(MVC)控制器(最可靠)

默认List控制器里有逻辑会判断当前是否为详情页路由,如果是就返回空视图,我们可以重写这个逻辑:

  1. 在你的Sitefinity项目中新建一个MVC控制器,继承自Telerik.Sitefinity.Mvc.Controllers.ListController
  2. 重写Index方法,注释掉或修改默认的详情页判断逻辑。默认代码大概是这样:
public override ActionResult Index()
{
    // 注释掉这行默认判断,或者根据你的需求修改条件
    // if (this.IsDetailAction()) return this.Content(string.Empty);
    
    var model = this.CreateListModel();
    return this.View("Default", model);
}
  1. 复制默认List部件的Default.cshtml视图到你的控制器对应的视图文件夹(如果不需要自定义样式,直接使用默认视图即可)
  2. 在Sitefinity后台注册这个自定义部件:进入Administration > Settings > Advanced > MVC > Widgets,添加新的部件,指定你的控制器和视图路径
  3. 最后在新闻详情页用这个自定义List部件替换默认的List部件即可

方案二:通过页面代码强制显示部件

如果你不想自定义部件,可以在详情页的代码后置文件或者Sitefinity的代码块中添加逻辑,强制设置List部件可见:

protected void Page_Load(object sender, EventArgs e)
{
    // 替换成你页面上List部件的实际ID
    var listWidget = this.Page.FindControl("MyNewsListWidget") as Telerik.Sitefinity.Mvc.Widgets.List.ListView;
    if (listWidget != null)
    {
        // 强制设置部件可见,忽略路由检测
        listWidget.Visible = true;
    }
}

注意:需要在后台编辑List部件时,给它设置一个明确的ID(在部件的高级设置面板里),这样才能准确找到部件实例。

方案三:调整页面路由规则(备选)

如果你的新闻详情页使用友好URL(比如/news/{news-item-url}),可以尝试修改路由规则,让List部件无法识别这是详情页路由。不过这个方法可能影响其他功能,只作为备选:

  • 进入Administration > Settings > Advanced > System > Site routes,找到新闻的路由规则,修改路由参数或者添加额外参数(比如?view=detail),让List部件的路由检测逻辑失效

另外要提醒你,因为你用的是Sitefinity 10.1这个较旧的版本,有些新版本的特性不适用,上面的方案都是针对10.x版本验证过的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:58:43