Sae*_*see 1 c# partial-views razor asp.net-mvc-5
我在我的网站上使用侧边栏,其中包含来自我的数据库的统计数据和静态数据,如链接和其他文本.
在我_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);
}
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力,但我不需要所有视图的统计数据,只有 /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");
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我需要创建两个局部视图,但一个是静态的,所以我不会长时间编辑它:).测试,它的工作原理.
还有另一种解决方案.至于我,我讨厌这样的事情
ViewContext.RouteData.Values["controller"].ToString().ToUpper() == "HOME"
Run Code Online (Sandbox Code Playgroud)
它必须使用魔术字符串,它甚至不是const,只是运行时字符串.它可能提前提供一些问题.如果你需要在另一个页面上怎么办?
我建议你使用嵌套布局.您可以使用section创建_Layout
更新:
_Layout.cshtml:
<...>
@Html.RenderSection("sidebar", false)
<...>
Run Code Online (Sandbox Code Playgroud)
然后在您的主页上,您可以使用_SidebarLayout而不是_Layout.无论何时你需要在任何页面上使用侧边栏,你都可以做同样的事情.
所以你的主页看起来像
@{
Layout = "~/Views/_Layout.cshtml";
}
@section sidebar {
@Html.RenderAction("SidebarPV", "Home")
}
Run Code Online (Sandbox Code Playgroud)
所有其他页面看起来都像
@{
Layout = "~/Views/_Layout.cshtml";
}
@section sidebar {
@Html.RenderAction("SidebarNoStatPV", "Home")
}
Run Code Online (Sandbox Code Playgroud)
如果你不想用这个"SidebarNoStatPV"重复自己,你可以使用嵌套布局:
_NoStatLayout.cshtml
@{
Layout = "~/Views/_Layout.cshtml";
}
@section sidebar {
@Html.RenderAction("SidebarNoStatPV", "Home")
}
Run Code Online (Sandbox Code Playgroud)
并将其用作任何页面的布局,但Home.如果您需要为不同的页面添加附加信息的侧栏,您可以将@ Html.RenderSection("sidebar",false)放在_NoStatLayout.cshtml的侧边栏部分中.
为什么我认为这是一个更好的选择?它适合SRP,因为只有主页应该负责它自己的唯一数据.
| 归档时间: |
|
| 查看次数: |
4337 次 |
| 最近记录: |