我使用我的网站上的一个侧边栏从我的数据库和静态数据,如链接和其他文本的统计。
在我的_Layout.cshtml中,我使用Html.RenderAction("SidebarPV", "Home");调用侧栏。
侧栏是使用ViewModel进行统计的部分视图。SidebarPV是在我的HomeController中生成的:
public ActionResult SidebarPV() {
SidebarViewModel viewmodel = new SidebarViewModel();
DateTime now = DateTime.Now;
viewmodel.stat_data1 = db.Table1.Where(e => e.DateDeb <= now && e.DateFin >= now).Count();
viewmodel.stat_data2 = db.Table2.Where(c => c.DateDeb <= now && c.DateFin >= now).Count();
return PartialView("SidebarPV", viewmodel);
}它就像一种魅力,但我不需要所有视图上的统计数据,只有在/Home/Index上
因此,我想‘评论’的统计生成时,ser不在网站的索引。
谢谢你的建议。
编辑(解决方案,感谢 krillgar) :
我在我的_Layout上写的
@{
var isHome = ViewContext.RouteData.Values["controller"].ToString().ToUpper() == "HOME";
var isIndex = ViewContext.RouteData.Values["action"].ToString().ToUpper() == "INDEX";
if (isHome && isIndex) {
Html.RenderAction("SidebarPV", "Home");
}
else {
Html.RenderAction("SidebarNoStatPV", "Home");
}
}我知道我需要创建两个部分视图,但是其中一个视图是静态的,所以我不会在很长时间内编辑它:)。测试过了,效果很好。
发布于 2014-07-28 15:28:44
如果您希望保留代码来调用_Layout页面中的操作,那么您只需要获得生成页面时调用什么操作的信息。将以下内容添加到您的_Layout顶部
var isHome = ViewContext.RouteData.Values["controller"].ToString().ToUpper() == "HOME";
var isIndex = ViewContext.RouteData.Values["action"].ToString().ToUpper() == "INDEX";然后将调用包装起来,在_Layout中任何需要的地方生成部分视图,如下所示:
if (isHome && isIndex) {
Html.RenderAction("SidebarPV", "Home");
}发布于 2014-07-29 07:10:01
还有另一个解决办法。至于我,我讨厌这样的事情
ViewContext.RouteData.Values["controller"].ToString().ToUpper() == "HOME"它必须使用神奇的字符串,甚至不是const,只是运行时字符串。它可能预先提供一些问题。如果你在另一页上需要它呢?
我建议您使用嵌套布局。您可以用节创建_Layout
更新:
_Layout.cshtml:
<...>
@Html.RenderSection("sidebar", false)
<...>然后,在您的主页上,您可以只使用_SidebarLayout而不是_Layout。每当您需要任何页面上的侧边栏时,您都可以这样做。
所以你的主页看起来就像
@{
Layout = "~/Views/_Layout.cshtml";
}
@section sidebar {
@Html.RenderAction("SidebarPV", "Home")
}所有其他页面看起来就像
@{
Layout = "~/Views/_Layout.cshtml";
}
@section sidebar {
@Html.RenderAction("SidebarNoStatPV", "Home")
}如果不想重复使用这个"SidebarNoStatPV“,可以使用嵌套布局:
_NoStatLayout.cshtml
@{
Layout = "~/Views/_Layout.cshtml";
}
@section sidebar {
@Html.RenderAction("SidebarNoStatPV", "Home")
}并将其用作除主页之外的任何页面的布局。如果您需要为不同的页面扩展附带信息的侧栏,您可以将@Html.RenderSection(“侧栏”,false)放在_NoStatLayout.cshtml中的侧栏部分中。
为什么我认为这是一个更好的选择?它适合SRP,因为只有主页应该负责它自己独特的数据。
https://stackoverflow.com/questions/24998604
复制相似问题