在 2sxc 应用程序的详细信息视图中隐藏英雄或其他模块的最佳方法是什么?

问题描述

我有一个简单的 2sxc 应用程序,它是特殊资源的列表和详细信息。所以我有两个 C# Razor 模板 - 一个用于列表,一个用于详细信息。

当我点击进入详细信息视图时,详细信息模板会显示内容。但我想隐藏页面上的英雄横幅模块(另一个 DNN 2sxc 模块)。因为该应用程序存在于一个 DNN 页面上,所以英雄模块自然会同时出现在两个页面上。我希望这个英雄出现在列表中,但不是详细信息。

是否有某种特殊的 DNN 和/或 2sxc C# razor 代码可以放入 details.csthml 中以使其成为该应用程序模块中唯一出现在该页面上的模块?我知道我可以简单地使用 CSS 来隐藏英雄,但我很好奇是否有更好的方法

解决方法

通常会显示详细信息而不是列表,因为某些东西正在触发它。例如,您可能有一个使用 myid/.* 的 UrlKey 的备用“* - 详细信息”视图。无论检测是什么,只需将一些代码添加到显示横幅的视图中,以便它知道在这些条件下不执行其工作。诀窍是在输出任何内容之前退出英雄视图。

这是一个函数(依赖于 RazorBlade),如果 URL 有参数,它将返回真/假:

public bool qsHasKey(string paramName = "demo") {
  return Text.Has(Request.QueryString[paramName],false);
}

那么你就可以像往常一样称呼它了。不太正常的是让您的 View 几乎什么都不做,因为它是 Razor,这意味着您需要提前 return (而不是退出)。所以在你的英雄视图的开始附近,只要把

// no hero needed if we are displaying Details
if(qsHasKey("myid")) {
  return; 
}
,

Jeremys 的回答适用于许多用例。

替代方法 #1 是创建一个仅包含详细信息视图的详细信息页面,并链接到该页面。我们在新闻应用程序中做到了这一点,它有一个应用程序设置,您可以在其中配置哪个页面应该是详细信息页面 - 然后无论新闻列表放置在哪里(就像在家里一样有很多其他模块),详细信息仍将在正确的位置打开。

替代方法 #2 是创建类似 ajax 样式的内容,例如扩展部分或灯箱。