Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.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
C# ASP.NET MVC 5-获取当前视图';s名称(Razor.cshtml侧)_C#_Css_Asp.net_Asp.net Mvc_Razor - Fatal编程技术网

C# ASP.NET MVC 5-获取当前视图';s名称(Razor.cshtml侧)

C# ASP.NET MVC 5-获取当前视图';s名称(Razor.cshtml侧),c#,css,asp.net,asp.net-mvc,razor,C#,Css,Asp.net,Asp.net Mvc,Razor,我是一名学生,对ASP.NETMVC非常陌生,我来自ASP.NETWebForm。(习惯了) 我有一张清单: <ul class="sidebar bg-grayDark"> <li class="active"> <a href="@Url.Action("Index", "Home")"> <span class="mif-home icon"></span>

我是一名学生,对ASP.NETMVC非常陌生,我来自ASP.NETWebForm。(习惯了)

我有一张清单:

<ul class="sidebar bg-grayDark">
    <li class="active">
        <a href="@Url.Action("Index", "Home")">
            <span class="mif-home icon"></span>
            <span class="title">Home</span>
        </a>
    </li>
    <li class="bg-hover-black">
        <a href="@Url.Action("Index", "Product")">
            <span class="mif-shop icon"></span>
            <span class="title">Products</span>
            <span class="counter">14</span>
        </a>
    </li>
    <li class="bg-hover-black">
        <a href="@Url.Action("Index", "Category")">
            <span class="mif-flow-cascade icon"></span>
            <span class="title">Categories</span>
            <span class="counter">9</span>
        </a>
    </li>
    <li class="bg-hover-black">
        <a href="@Url.Action("Index", "User")">
            <span class="mif-users icon"></span>
            <span class="title">Users</span>
            <span class="counter">1</span>
        </a>
    </li>
</ul>

但它不起作用,因为当页面加载时,html会被重新呈现为主页部分的“活动”。(如果我删除Home的“active”,则单击后将没有任何内容处于活动状态,除了单击和页面加载之间的内容)

你有什么解决办法吗?我在网上搜索了很多,但没有找到任何帮助

对不起,有英语错误,我还在学:)

谢谢


Hellcat8。

确认:当用户单击项目时,您正在更改页面

因此,您的javascript将运行,但随后整个页面将被重新编写,您将返回到第一个状态(即主页处于活动状态,因为标记中的主页处于活动状态)

要查看当前页面,可以使用
location.href
并将其与href url进行比较,如:

$(function() {
    $("ul.sidebar>li").removeClass("active");  // or just not have active in the markup
    $("li>a[href=" + location.href + "]").closest("li").addClass("active");
});
或者,这将更加健壮,您可以将令牌(字符串、枚举或常量)与viewmodel一起传递并检查,例如:

<ul class='sidebar'>
    <li data-page='home'...
    ...
    <li data-page='categories'...
(或仅在标记中…)



由于您使用的是以控制器命名页面的约定,因此可以在razor中执行此操作以获取控制器/页面名称:

@{
 var pageName = ViewContext.RouteData.Values["controller"].ToString();
}

<ul class="sidebar bg-grayDark">
    <li class="@(pageName == "Home" ? "active" : "")">
        <a href="@Url.Action("Index", "Home")">
            <span class="mif-home icon"></span>
            <span class="title">Home</span>
        </a>
    </li>
    <li class="bg-hover-black @(pageName == "Product" ? "active" : "")">
        <a href="@Url.Action("Index", "Product")">
            <span class="mif-shop icon"></span>
            <span class="title">Products</span>
            <span class="counter">14</span>
        </a>
    </li>
    <li class="bg-hover-black @(pageName == "Category" ? "active" : "")">
        <a href="@Url.Action("Index", "Category")">
            <span class="mif-flow-cascade icon"></span>
            <span class="title">Categories</span>
            <span class="counter">9</span>
        </a>
    </li>
    <li class="bg-hover-black @(pageName == "User" ? "active" : "")">
        <a href="@Url.Action("Index", "User")">
            <span class="mif-users icon"></span>
            <span class="title">Users</span>
            <span class="counter">1</span>
        </a>
    </li>
</ul>
@{
var pageName=ViewContext.RouteData.Values[“controller”].ToString();
}

这将在页面服务器端设置活动类,无需使用javascript在客户端执行此操作。

以下是我的级联引导下拉菜单方法,在Razor Pages项目的_layout.cshtml文件中用
活动类装饰

此解决方案的主要要素:

  • ViewContext.RouteData.Values[“page”]
    获取当前页面路由
  • 使用锚定标记帮助程序而不是
    @Url.Action()
代码:

    @{ 字符串pageRoute=ViewContext.RouteData.Values[“page”].ToString(); }
      • Staff
      • StaffGroups
      • PermissionsGroups
      • AllowedModules
      • AllowedServices

要获取活动操作或控制器的名称,请使用以下命令

var controllerName = ViewContext.RouteData.Values["controller"].ToString();
var actionName = ViewContext.RouteData.Values["action"].ToString();
然后,您可以使用以下代码为li指定类:

<li class="@(actionName == "HomePage" ? "active":"")"><a href="~/Account/HomePage">Home</a></li>
  • 或者,您可以按以下方式检查这两个选项:

     <li class="@(controllerName =="Account" && actionName == "HomePage" ? "active":"")"><a href="~/Account/HomePage">Home</a></li>
    

  • 文章的开头不显示。。这是:“大家好,我是一名学生,对ASP.NET MVC非常陌生[…]”非常感谢!它正在工作!:)还有一件事:你有一些链接,我可以有一些关于剃须刀可能性的信息吗?在网络上,我只找到基本的东西,如IF和Foreach等(再次感谢!没问题,伙计,很高兴我能帮上忙:)这是错误的,您得到的是控制器名称,而不是根据的视图名称OP@MatthewLock因此答案中的措辞是:“由于您使用的是以控制器命名的页面的约定,因此您可以这样做”我认为分号应该跟在最上面的C代码片段后面。非常感谢你花时间帮助我!:)
    <ul class="nav navbar-nav">
        @{
            String pageRoute = ViewContext.RouteData.Values["page"].ToString();
        }
        <li class="dropdown @( pageRoute.Contains("/CustomerModel/") ? "active" : "" )">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Customer-Model <span class="caret"></span></a>
            <ul class="dropdown-menu">
                <li class="@( pageRoute.Contains("/Customers/") ? "active" : "" )"><a asp-page="/CustomerModel/Customers/Index">Customers</a></li>
                <li class="@( pageRoute.Contains("/Partners/")  ? "active" : "" )"><a asp-page="/CustomerModel/CustomerPermissions/Index">CustomerPermissions</a></li>
            </ul>
        </li>
        <li class="dropdown @( pageRoute.Contains("/StaffModel/") ? "active" : "" )">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Staff-Model <span class="caret"></span></a>
            <ul class="dropdown-menu">
                <li class="@( pageRoute.Contains("/Staff/")              ? "active" : "" )"><a asp-page="/StaffModel/Staff/Index">Staff</a></li>
                <li class="@( pageRoute.Contains("/StaffGroups/")        ? "active" : "" )"><a asp-page="/StaffModel/StaffGroups/Index">StaffGroups</a></li>
                <li class="@( pageRoute.Contains("/PermissionsGroups/")  ? "active" : "" )"><a asp-page="/StaffModel/PermissionsGroups/Index">PermissionsGroups</a></li>
                <li class="@( pageRoute.Contains("/AllowedModules/")     ? "active" : "" )"><a asp-page="/StaffModel/AllowedModules/Index">AllowedModules</a></li>
                <li class="@( pageRoute.Contains("/AllowedServices/")    ? "active" : "" )"><a asp-page="/StaffModel/AllowedServices/Index">AllowedServices</a></li>
            </ul>
        </li>
    </ul>
    
    var controllerName = ViewContext.RouteData.Values["controller"].ToString();
    var actionName = ViewContext.RouteData.Values["action"].ToString();
    
    <li class="@(actionName == "HomePage" ? "active":"")"><a href="~/Account/HomePage">Home</a></li>
    
     <li class="@(controllerName =="Account" && actionName == "HomePage" ? "active":"")"><a href="~/Account/HomePage">Home</a></li>