Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 基于控制器的ASP.NETMVC样式列表项_Css_Asp.net Mvc - Fatal编程技术网

Css 基于控制器的ASP.NETMVC样式列表项

Css 基于控制器的ASP.NETMVC样式列表项,css,asp.net-mvc,Css,Asp.net Mvc,我的最终目标是创建一个菜单,将一个类添加到与当前页面关联的列表项中 因此,我将其设置为每个控制器都与菜单中的一个项目相关联。我需要向该列表项添加一个类(更改颜色、背景等) 有没有一个简单的方法可以做到这一点?向视图传递一个值,然后呢?在我最近的一个项目中,我使用HtmlHelper扩展并从ViewContext.RouteData.Values集合获取数据 因此,构建一个简单的扩展,如下所示: public static string OnClass(this HtmlHelper html,

我的最终目标是创建一个菜单,将一个类添加到与当前页面关联的列表项中

因此,我将其设置为每个控制器都与菜单中的一个项目相关联。我需要向该列表项添加一个类(更改颜色、背景等)


有没有一个简单的方法可以做到这一点?向视图传递一个值,然后呢?

在我最近的一个项目中,我使用HtmlHelper扩展并从ViewContext.RouteData.Values集合获取数据

因此,构建一个简单的扩展,如下所示:

public static string OnClass(this HtmlHelper html, bool isOn)
{
    if (isOn)
        return " class=\"on\"";

    return string.Empty;
}
您可以建立任意数量的组合,例如

仅测试当前操作:

public static string OnClass(this HtmlHelper html, string action)
{
    string currentAction = html.ViewContext.RouteData.Values["action"].ToString();

    return html.OnClass(currentAction.ToLower() == action.ToLower());
}
测试一些操作:

public static string OnClass(this HtmlHelper html, string[] actions)
{
    string currentAction = html.ViewContext.RouteData.Values["action"].ToString();

    foreach (string action in actions)
    {
        if (currentAction.ToLower() == action.ToLower())
            return html.OnClass(true);
    }

    return string.Empty;
}
动作和控制器测试:

public static string OnClass(this HtmlHelper html, string action, string controller)
{
    string currentController = html.ViewContext.RouteData.Values["controller"].ToString();

    if (currentController.ToLower() == controller.ToLower())
        return html.OnClass(action);

    return string.Empty;
}
等等等等

然后,你只需在你的观点中这样称呼它

    诸如此类 诸如此类 Blah 诸如此类
不管你怎么看,HtmlHelper扩展都是你的朋友!:-)

HTHs

Charles

相关:@Robert-有点,但我想要一个非javascript的解决方案。我认为理想的情况是,因为我在服务器上有我所需要的所有信息,我可以在服务器上做这件事。我只是有机会研究一下并实现它。太棒了!谢谢你,伙计!如果(currentAction.ToLower()==action.ToLower())。。我认为比较字符串的正确方法是使用StringComparison.InvariantCultureInogoreCase
<ul id="left-menu">
    <!-- simple boolean -->
    <li <%= Html.OnClass(something == somethingElse) %>>Blah</li>
    <!-- action -->
    <li <%= Html.OnClass("Index") %>>Blah</li>
    <!-- any number of actions -->
    <li <%= Html.OnClass(new string[] { "Index", "Details", "View" }) %>>Blah</li>
    <!-- action and controller -->
    <li <%= Html.OnClass("Index", "Home") %>>Blah</li>
</ul>