Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 5仅在主索引的布局中显示局部视图_C#_Razor_Asp.net Mvc 5_Partial Views - Fatal编程技术网

C# MVC 5仅在主索引的布局中显示局部视图

C# MVC 5仅在主索引的布局中显示局部视图,c#,razor,asp.net-mvc-5,partial-views,C#,Razor,Asp.net Mvc 5,Partial Views,我在我的网站上使用一个侧边栏,上面有我数据库中的统计数据以及链接和其他文本等静态数据 在我的\u Layout.cshtml中,我使用Html.RenderAction(“SidebarPV”,“Home”)调用侧边栏 侧边栏是一个局部视图,使用统计信息的ViewModel。 SidebarPV在myHomeController中生成,如下所示: public ActionResult SidebarPV(){ SidebarViewModel viewmodel=新的SidebarViewMo

我在我的网站上使用一个侧边栏,上面有我数据库中的统计数据以及链接和其他文本等静态数据

在我的
\u Layout.cshtml
中,我使用
Html.RenderAction(“SidebarPV”,“Home”)
调用侧边栏

侧边栏是一个局部视图,使用统计信息的ViewModel。
SidebarPV
在my
HomeController
中生成,如下所示:

public ActionResult SidebarPV(){
SidebarViewModel viewmodel=新的SidebarViewModel();
DateTime now=DateTime.now;
viewmodel.stat_data1=db.Table1.Where(e=>e.DateDeb=now).Count();
viewmodel.stat_data2=db.Table2.Where(c=>c.DateDeb=now.Count();
返回PartialView(“SidebarPV”,viewmodel);
}
它工作起来很有魅力,但我不需要所有视图的统计信息,只需要
/Home/Index

因此,当ser不在网站索引上时,我想“评论”统计数据的生成

谢谢你的建议

编辑(解决方案,感谢):

我在我的
\u布局中写了

@{
var isHome=ViewContext.RouteData.Values[“controller”].ToString().ToUpper()=“HOME”;
var isIndex=ViewContext.RouteData.Values[“action”].ToString().ToUpper()=“INDEX”;
如果(iHome&&iIndex){
渲染(“SidebarPV”,“Home”);
}
否则{
渲染(“SidebarNoStatPV”、“Home”);
}
}
我知道我需要创建两个局部视图,但其中一个是静态的,所以我很长时间不会编辑它:)。
经过测试,它可以工作。

如果您想在
\u布局
页面中保留调用操作的代码,那么您只需要获取生成页面时调用的操作的信息。将以下内容添加到
\u布局的顶部

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");
}

如果希望在
\u布局
页面中保留调用操作的代码,则只需获取生成页面时调用的操作的信息。将以下内容添加到
\u布局的顶部

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");
}

还有另一个解决方案。至于我,我讨厌这样的事情

ViewContext.RouteData.Values["controller"].ToString().ToUpper() == "HOME"
它必须使用魔术字符串,它甚至不是常量,只是运行时字符串。它可能会提前提供一些问题。如果你需要它在另一页上怎么办

我建议您使用嵌套布局。您可以使用截面创建_布局

更新:

_Layout.cshtml:

<...>
@Html.RenderSection("sidebar", false)
<...>
所有其他页面看起来都是这样的

@{
    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,因为只有主页应该负责自己的独特数据。

还有另一种解决方案。至于我,我讨厌这样的事情

ViewContext.RouteData.Values["controller"].ToString().ToUpper() == "HOME"
它必须使用魔术字符串,它甚至不是常量,只是运行时字符串。它可能会提前提供一些问题。如果你需要它在另一页上怎么办

我建议您使用嵌套布局。您可以使用截面创建_布局

更新:

_Layout.cshtml:

<...>
@Html.RenderSection("sidebar", false)
<...>
所有其他页面看起来都是这样的

@{
    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,因为只有主页才应该负责它自己的唯一数据。

将部分放在主页索引上,而不是布局上。如果它将被隐藏在HTML标记中的某个地方,而HTML标记在主页/索引视图中将变得不可访问,则这是不可能的。将部分放在主页索引上,而不是布局上。如果是这样的话,这是不可能的将被隐藏在HTML标记中的某个地方,该标记在主视图/索引视图中变得不可访问。无法这样做,因为我想对布局中调用的部分视图代码本身的一部分进行“注释”。我试图将此代码放在局部视图中,但不起作用。也许,有了这段代码,我可以在布局中调用两个不同的局部视图。。。我会试试的。第一篇文章编辑后,解决方案就在这里。谢谢。不能这样做,因为我想“注释”布局中调用的部分视图代码本身的一部分。我试图将此代码放在局部视图中,但不起作用。也许,有了这段代码,我可以在布局中调用两个不同的局部视图。。。我会试试的。第一篇文章编辑后,解决方案就在这里。谢谢,谢谢你的建议。我需要所有页面上的侧边栏,只是侧边栏中的一些数据不需要出现在所有页面上。这是一个好主意,而不是我大多数时候考虑过的事情。谢谢你的提示。我们已经在我们的项目中使用了多个布局,我不希望创建其他布局。我认为你的解决方案也更“干净”。我们的网站是一个内部网,不会在互联网上,所以第一个解决方案不会是一个问题。我为我的其他项目保留您的建议:)谢谢您的建议。我需要所有页面上的侧边栏,只是侧边栏中的一些数据不需要出现在所有页面上。这是一个好主意,而不是我大多数时候考虑过的事情。谢谢你的提示。我们已经在我们的项目中使用了多个布局,我不希望创建其他布局。我认为你的解决方案也更“干净”。我们的网站是一个内部网,不会