Asp.net mvc 如何将动作名称注入母版页以突出显示导航菜单中的当前动作?

Asp.net mvc 如何将动作名称注入母版页以突出显示导航菜单中的当前动作?,asp.net-mvc,Asp.net Mvc,我试图找到一个不使用javascript解决此问题的解决方案: 我有一个包含导航菜单的母版页。该菜单中的每个项目都是一个动作 当用户选择该操作并转到该视图时,我希望在导航菜单中突出显示该项,以向用户指示他们当前正在查看的内容 我可以向一个基本视图模型添加一个动作名称,从中派生出所有其他视图模型,但我想知道是否有更好的方法 我已经看到,当这是MVC时,会出现一些复杂性。对于给定的操作,可以返回任意数量的不同视图,因此所有这些视图都需要在导航菜单中突出显示相同的操作。嗯 想法 另外,我刚刚注意到st

我试图找到一个不使用javascript解决此问题的解决方案:

我有一个包含导航菜单的母版页。该菜单中的每个项目都是一个动作

当用户选择该操作并转到该视图时,我希望在导航菜单中突出显示该项,以向用户指示他们当前正在查看的内容

我可以向一个基本视图模型添加一个动作名称,从中派生出所有其他视图模型,但我想知道是否有更好的方法

我已经看到,当这是MVC时,会出现一些复杂性。对于给定的操作,可以返回任意数量的不同视图,因此所有这些视图都需要在导航菜单中突出显示相同的操作。嗯

想法


另外,我刚刚注意到stackoverflow与上面菜单上的橙色突出显示类似。我看到他们在给你的班级打分。他们采取了什么方法我想知道……

您可以使用CSS来实现这一点。如果您知道要突出显示的项目的ID,请在视图中添加CSS规则

#MenuId 
{
color: ...;
etc...
}
澄清: 在母版页的头部添加占位符,然后在视图中动态添加样式部分

#MenuId 
{
color: ...;
etc...
}
在母版页中:

<head id="Head1" runat="server">   
<asp:ContentPlaceHolder ID="head" runat="server">

</asp:ContentPlaceHolder>
</head>
在视图中

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<style type="text/css">
  #<%= Model.IdToHighlight %>
  {
      color:Blue;//or something
  }
</style>
</asp:Content>

您可以使用CSS来实现这一点。如果您知道要突出显示的项目的ID,请在视图中添加CSS规则

#MenuId 
{
color: ...;
etc...
}
澄清: 在母版页的头部添加占位符,然后在视图中动态添加样式部分

#MenuId 
{
color: ...;
etc...
}
在母版页中:

<head id="Head1" runat="server">   
<asp:ContentPlaceHolder ID="head" runat="server">

</asp:ContentPlaceHolder>
</head>
在视图中

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<style type="text/css">
  #<%= Model.IdToHighlight %>
  {
      color:Blue;//or something
  }
</style>
</asp:Content>
当用户选择该操作时 转到我要突出显示的视图 导航菜单中的该项表示 向用户显示他们当前的状态 观看

您可以使用html助手方法生成菜单,并且在生成菜单时,可以向菜单项中添加与当前操作相关的类

可以使用参数或使用所述的某些方法来完成

但我认为最有效的方法是使用javascript,第二个最好的选择是markt写的

当用户选择该操作时 转到我要突出显示的视图 导航菜单中的该项表示 向用户显示他们当前的状态 观看

您可以使用html助手方法生成菜单,并且在生成菜单时,可以向菜单项中添加与当前操作相关的类

可以使用参数或使用所述的某些方法来完成


但我认为最有效的方法是使用javascript,第二个最好的选择是markt所写的。

我建议你从mvc设计图库中获取橙色选项卡模板并进行检查。

我建议你从mvc设计图库获取橙色选项卡模板并进行检查。

我所做的是: 我创建了自己的名为RenderNulink的助手,因此没有调用

<li><%= Html.ActionLink("Home", "index", "home")%></li>
我援引

<%= Html.RenderMenuLink("Home", "index", "home")%>
依次添加一个链接,如果用户正在访问此链接[1],则所选类将附加到列表项的类属性

[1] :我通过检查用户所在的URL是否与此链接生成的URL匹配来实现此功能。代码粘贴在下面:

我所做的是: 我创建了自己的名为RenderNulink的助手,因此没有调用

<li><%= Html.ActionLink("Home", "index", "home")%></li>
我援引

<%= Html.RenderMenuLink("Home", "index", "home")%>
依次添加一个链接,如果用户正在访问此链接[1],则所选类将附加到列表项的类属性

[1] :我通过检查用户所在的URL是否与此链接生成的URL匹配来实现此功能。代码粘贴在下面:


是的,我意识到效果将通过CSS实现。问题是我需要在母版页中设置一个类,这取决于设置了什么操作。寻找一个优雅的方式…为什么它必须在母版中?将占位符添加到母版页并在视图中动态填充。这不优雅?你的澄清让我意识到你实际上是在暗示我几分钟后做的同样的事情+1我会试试的,谢谢。我真想知道当你有部分视图时母版页有多有用…注意stackoverflow使用了一个标志,而不是ID的样式覆盖。事实上,stackoverflow菜单中的lis没有ID。是的,我意识到效果将通过CSS实现。问题是我需要在母版页中设置一个类,这取决于设置了什么操作。寻找一个优雅的方式…为什么它必须在母版中?将占位符添加到母版页并在视图中动态填充。这不优雅?你的澄清让我意识到你实际上是在暗示我几分钟后做的同样的事情+1我会试试的,谢谢。我确实想知道当你有部分视图时母版页有多有用……请注意stackoverflow使用了一个标志,而不是ID的样式覆盖。事实上,stackoverflow中的lis
ow菜单没有ID。javascript-free表示没有javascript?javascript-free表示没有javascript?人们如何看待在视图中而不是在母版页中定义导航菜单?我认为这是可以的,但似乎违反了干涸的原则——所有页面的共同点应该放在母版页中吗?否则,母版页将变为无效。您可以在视图中创建用户控件并使用RenderPartial。。至少,您的菜单代码将位于一个位置,并且可以根据视图进行不同的渲染。但是,我更倾向于将其保留在母版页中,除非您真的需要动态生成。顺便说一句,这将允许您以与StackOverflow相同的方式生成html。您可以根据模型向菜单添加“youarehere”类。人们如何看待在视图中而不是母版页中定义导航菜单?我认为这是可以的,但似乎违反了干涸的原则——所有页面的共同点应该放在母版页中吗?否则,母版页将变为无效。您可以在视图中创建用户控件并使用RenderPartial。。至少,您的菜单代码将位于一个位置,并且可以根据视图进行不同的渲染。但是,我更赞成将其保留在母版页中,除非您真的需要动态生成..顺便说一句-这将允许您以与StackOverflow相同的方式生成html-您可以根据模型向菜单添加“youarehere”类..一段时间内保存世界橙色选项卡->一段时间内保存世界橙色选项卡->