Razor DRY方法标记网页当前查看的选项卡

Razor DRY方法标记网页当前查看的选项卡,razor,dry,Razor,Dry,我在网页顶部有一些选项卡:主页、功能、联系人等 我需要将我当前所在的类别标记为 如何使用razor语法对我的_Layout.cshtml页面进行适当的编码,从而不必手动将每个页面的相应选项卡标记为class=“current” @Html.ActionLink(“主页”、“索引”、“主页”) @ActionLink(“博客”、“博客”、“主页”) @ActionLink(“公文包”、“公文包”、“主页”) 您可以使用的示例方法 @helper BuildLink(string name, str

我在网页顶部有一些选项卡:主页、功能、联系人等

我需要将我当前所在的类别标记为

如何使用razor语法对我的_Layout.cshtml页面进行适当的编码,从而不必手动将每个页面的相应选项卡标记为class=“current”

  • @Html.ActionLink(“主页”、“索引”、“主页”)
  • @ActionLink(“博客”、“博客”、“主页”)
  • @ActionLink(“公文包”、“公文包”、“主页”)
  • 您可以使用的示例方法

    @helper BuildLink(string name, string action, string controller)
    {
        var url = Url.Action(action, controller);
        bool isActive = Request.Url.AbsolutePath.Equals(url, StringComparison.InvariantCultureIgnoreCase);
        <li class="@(isActive ? "current" : String.Empty)"><a href="@(url)">@name</a></li>
    }
    
    @BuildLink("Home", "Index", "Home")
    @BuildLink("Blog", "Blog", "Home")
    @BuildLink("Portfolio", "Portfolio", "Home")
    
    @helper BuildLink(字符串名称、字符串操作、字符串控制器)
    {
    var url=url.Action(Action,controller);
    bool isActive=Request.Url.AbsolutePath.Equals(Url,StringComparison.InvariantCultureInogoreCase);
    
  • } @BuildLink(“主页”、“索引”、“主页”) @BuildLink(“博客”、“博客”、“主页”) @BuildLink(“投资组合”、“投资组合”、“主页”)
    您可以在每个控制器上设置ViewData[“Home”]=“activeTab”类,并在视图中使用该信息

    如果获取该viewData字典的值,这将使选项卡处于活动状态。 很简单,很干净

    控制器内部设置viewdata,如下所示

    ViewData["SomeTab"] = "activeTab";
        return View("Index");
    
    视图侧:

    <li class="<@ ((string)ViewData["SomeTab"] ?? "") >"><@Html.ActionLink("SomeTab", "Index", "Home")></li>
    <li class="<@ ((string)ViewData["MyPage"] ?? "") %>"><@Html.ActionLink("MyPage", "MyPage", "")></li>
    

  • 似乎是一个不错的计划,但我得到了以下错误:CS0103:名称“Url”在当前上下文中不存在-参考var Url=Url.Action(Action,controller);这很奇怪,我想说也许你没有引用System.Web.MVC,但是Html.ActionLink已经需要了。母版页是否继承System.Web.Mvc.ViewMasterPage?(查看您的配置文件)word Master根本不在我的项目中,所以我猜不会。我在配置的名称空间部分添加了这一行:-没有帮助,我猜我做错了。另外,到目前为止,自从生成应用程序以来,我对Web.config没有做过任何更改。可能是因为我的HTMLHelpers.cshtml文件(包含上述帮助程序)位于app_代码下?它可能是位于视图文件夹的Web.config中的类似“”的行。如果你错过了它。尝试添加它,保存,然后重新加载解决方案(虽然默认情况下应该包括它…)谢谢,但我正在寻找一个完全避免控制器的解决方案。
    <li class="<@ ((string)ViewData["SomeTab"] ?? "") >"><@Html.ActionLink("SomeTab", "Index", "Home")></li>
    <li class="<@ ((string)ViewData["MyPage"] ?? "") %>"><@Html.ActionLink("MyPage", "MyPage", "")></li>