将变量传递给当前页面布局中的局部变量的最佳方法是什么?
What is the best way to pass a variable to a partial in the layout about the current page?
我已经为一个新的 .Net Core MVC 应用程序实现了一个巨大的模板,并将它分成了不同的部分(页眉、侧边栏、页脚)。
它运行良好 - 但是,侧面菜单栏应该有
<li class="active">
在当前访问的页面上更改为:
<li class="treeview">
到
<li class="treeview active menu-open">
在任何打开的部分。
除了大量的 if 语句或大量 非常 混乱的代码之外,我不知道该怎么做。有人能给我指出正确的方向吗?
您不需要 if
语句,但您需要使用三元组(即需要一定数量的条件逻辑)。我发现处理这类事情的最简洁的方法是使用如下代码:
@{ string url; /* define anywhere, just needs to be before nav HTML */ }
...
@{ url = Url.Action("Foo"); }
<li class="@(Request.Path == url ? "active" : null)">
<a href="@url">Foo</a>
</li>
@{ url = Url.Action("Bar"); }
<li class="@(Request.Path == url ? "active" : null)">
<a href="@url">Bar</a>
</li>
首先声明 url
变量,因此不需要 50,000 个不同的变量。 URL 被简单地保存到一个变量中,因此您不需要重复任何对 Url.Action
的调用等(即一个用于条件,另一个用于实际 link)。在这里,我只是在进行直接比较匹配,但您可能希望将列表项标记为活动,即使当前页面是子项也是如此。为此,您只需使用 Request.Path.StartsWith(url)
作为条件。但是,不要在 link 上使用它到您的主页(即 /
),否则它将始终被标记为活动。
对您的 "treeview" 项采用相同的方法。
@{ url = Url.Action("Item1"); }
<li class="treeview @(Request.Path == url ? "active menu-open" : null)">
<a href="@url">Tree view item</a>
</li>
我已经为一个新的 .Net Core MVC 应用程序实现了一个巨大的模板,并将它分成了不同的部分(页眉、侧边栏、页脚)。
它运行良好 - 但是,侧面菜单栏应该有
<li class="active">
在当前访问的页面上更改为:
<li class="treeview">
到
<li class="treeview active menu-open">
在任何打开的部分。
除了大量的 if 语句或大量 非常 混乱的代码之外,我不知道该怎么做。有人能给我指出正确的方向吗?
您不需要 if
语句,但您需要使用三元组(即需要一定数量的条件逻辑)。我发现处理这类事情的最简洁的方法是使用如下代码:
@{ string url; /* define anywhere, just needs to be before nav HTML */ }
...
@{ url = Url.Action("Foo"); }
<li class="@(Request.Path == url ? "active" : null)">
<a href="@url">Foo</a>
</li>
@{ url = Url.Action("Bar"); }
<li class="@(Request.Path == url ? "active" : null)">
<a href="@url">Bar</a>
</li>
首先声明 url
变量,因此不需要 50,000 个不同的变量。 URL 被简单地保存到一个变量中,因此您不需要重复任何对 Url.Action
的调用等(即一个用于条件,另一个用于实际 link)。在这里,我只是在进行直接比较匹配,但您可能希望将列表项标记为活动,即使当前页面是子项也是如此。为此,您只需使用 Request.Path.StartsWith(url)
作为条件。但是,不要在 link 上使用它到您的主页(即 /
),否则它将始终被标记为活动。
对您的 "treeview" 项采用相同的方法。
@{ url = Url.Action("Item1"); }
<li class="treeview @(Request.Path == url ? "active menu-open" : null)">
<a href="@url">Tree view item</a>
</li>