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