加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 如何在ASP MVC3中创建可重用的导航菜单?

发布时间:2020-12-16 09:35:49 所属栏目:asp.Net 来源:网络整理
导读:我有几个视图现在重复的以下导航html /代码: ul class="topNav" li class="selected"@Html.ActionLink("Dashboard","Dashboard",new { id = ViewContext.RouteData.GetRequiredString("id") })/li li@Html.ActionLink("Stats","Stats",new { id = ViewConte
我有几个视图现在重复的以下导航html /代码:

<ul class="topNav">
    <li class="selected">@Html.ActionLink("Dashboard","Dashboard",new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
    <li>@Html.ActionLink("Stats","Stats",new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
    <li>@Html.ActionLink("Questions","Questions",new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
    <li>@Html.ActionLink("Answers","Answers",new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
    <li>@Html.ActionLink("Contacts","Contacts",new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
</ul>

当然,在每个View中,li的class =“selected”都会被更改.有没有一种简单的方法可以将这段代码放在局部视图或布局视图中?

另外,我真的必须使用ViewContext.RouteData.GetRequiredString(“id”)来获取控制器的id参数,还是有更简单的方法?

解决方法

这有两种方法可以解决这个问题.

>如果您想要一个真正可重用(Application independ解决方案),您应该创建一个HtmlHelper方法
Creating Custom HTML Helpers
>如果您在应用程序中需要它,请考虑做类似的事情.

public static class ControllerHelper
{
/// <summary>
/// Checks the current action via RouteData
/// </summary>
/// <param name="helper">The HtmlHelper object to extend</param>
/// <param name="actionName">The Action</param>
/// <param name="controllerName">The Controller</param>
/// <returns>Boolean</returns>
public static bool IsCurrentAction(this HtmlHelper helper,string actionName,string controllerName)
{
    string currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
    string currentActionName = (string)helper.ViewContext.RouteData.Values["action"];

    if (currentControllerName.Equals(controllerName,StringComparison.CurrentCultureIgnoreCase) && currentActionName.Equals(actionName,StringComparison.CurrentCultureIgnoreCase))
        return true;

    return false;

}
}


<ul class="topNav">
  <li @if(Html.IsCurrentAction("DashBoard","DashBoard")) { <text>class="selected"</text> }>@Html.ActionLink("Dashboard",new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
  <li>@if(Html.IsCurrentAction("Stats","Stats")) { <text>class="selected"</text> }>@Html.ActionLink("Stats",new { id = ViewContext.RouteData.GetRequiredString("id") })</li>

// ....
</ul>

请告诉我,如果你想实施第一种方法,我会提供更多帮助

希望这可以帮助

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读