Sitefinity 10.1.6502.0:新闻详情页默认List(MVC)部件消失求助
解决Sitefinity 10.1中List(MVC)部件在新闻详情页消失的问题
我之前在Sitefinity 10.x版本里碰到过完全一样的问题——默认的List(MVC)部件会自动检测当前URL是否是详情页路由,一旦判定就会隐藏,而针对新闻部件的多部件方案(一个列表、一个详情)因为新闻部件本身有专门的显示模式配置,所以不适用通用的List部件。下面几个方案你可以试试:
方案一:自定义List(MVC)控制器(最可靠)
默认List控制器里有逻辑会判断当前是否为详情页路由,如果是就返回空视图,我们可以重写这个逻辑:
- 在你的Sitefinity项目中新建一个MVC控制器,继承自
Telerik.Sitefinity.Mvc.Controllers.ListController - 重写
Index方法,注释掉或修改默认的详情页判断逻辑。默认代码大概是这样:
public override ActionResult Index() { // 注释掉这行默认判断,或者根据你的需求修改条件 // if (this.IsDetailAction()) return this.Content(string.Empty); var model = this.CreateListModel(); return this.View("Default", model); }
- 复制默认List部件的
Default.cshtml视图到你的控制器对应的视图文件夹(如果不需要自定义样式,直接使用默认视图即可) - 在Sitefinity后台注册这个自定义部件:进入Administration > Settings > Advanced > MVC > Widgets,添加新的部件,指定你的控制器和视图路径
- 最后在新闻详情页用这个自定义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
相关产品推荐
相关产品推荐

