Asp.net mvc 4 单击当前页面时阻止刷新

Asp.net mvc 4 单击当前页面时阻止刷新,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我是asp.NETMVC4新手 我正在我的网站中实现一个导航栏 我希望在导航栏中单击当前页面时阻止刷新 更新 我正在使用Razor作为导航栏: <ul> @Html.ActionLink("FEATURE_1_URL","FEATURE_1_URL","Home") @Html.ActionLink("FEATURE_2_URL","FEATURE_2_URL","Home") @Html.ActionLink("FEATURE_4_URL","FEATURE_4_URL","Ho

我是asp.NETMVC4新手

我正在我的网站中实现一个导航栏

我希望在导航栏中单击当前页面时阻止刷新

更新 我正在使用Razor作为导航栏:

<ul>

@Html.ActionLink("FEATURE_1_URL","FEATURE_1_URL","Home")
@Html.ActionLink("FEATURE_2_URL","FEATURE_2_URL","Home")
@Html.ActionLink("FEATURE_4_URL","FEATURE_4_URL","Home")
</ul>
    @ActionLink(“功能链接”、“功能链接”、“主页”) @ActionLink(“FEATURE\u2\uURL”、“FEATURE\u2\uURL”、“Home”) @ActionLink(“FEATURE\u4\uURL”、“FEATURE\u4\uURL”、“Home”)
如何实现它?

使用jquery

$('.btnCurrent').on('click', function(e){
    //Determine page using hidden field or something like that
    if(page == currentPage){
        e.preventDefault();
    }
});

在给定的解决方案中,页面将被刷新,但会减少服务器调用,并且不会一次又一次地调用操作

在MVC4中,实现这一目的的最佳方法之一是使用缓存

[OutputCache(Duration=30)]
public ActionResult FEATURE_1_URL(){}
因此,通过指定时间,它将在缓存中存储您的结果,因此当您单击下一次ActionLink时,它将根据持续时间为您提供缓存数据的结果,并将减少对服务器的请求


这至少对快速响应有用

基本上,我所做的是创建一个@helper来构建我的菜单项,您只需以某种方式将当前活动的菜单项传递给您的模型,并且在构建该项时,将href设置为#。这也可以通过javascript/jquery实现

这是我的@helper方法:

@helper MenuItemDesigner(string MenuItemName, bool hasAccess, string view, string controller, string areaName, MenuItems.Name menuItem, string       glyphicon, string badge)
 {
 if (hasAccess)
 {
     <a 
     @if (Model.ActiveMenuItem == menuItem)
     {
         <text>id = "@menuItem" href="#"</text>
        @Html.Raw("class= 'list-group-item active'");
     }
     else
     {
         <text>id = "@menuItem" href="@Url.Action(view, controller, new { Area = areaName })"</text>
        @Html.Raw("class= 'list-group-item'");
     }
     ><span class="@glyphicon"></span> @MenuItemName <span class="badge" data-val="0" style="display:none">@badge</span>
     </a>
 }
}
@helper MenuItemDesigner(字符串MenuItemName、bool hasAccess、字符串视图、字符串控制器、字符串区域名、MenuItems.Name menuItem、字符串图标、字符串徽章)
{
if(hasAccess)
{
}
}

显然,并非所有这些都适用于所有场景,但这可以作为参考。重要的是了解当前活动的菜单项并设置其href=“#”但您需要这样做

请向我们展示您的代码。这是一个一般性问题,我需要实现此功能:如果您在导航中有Home and About,并且单击Home,您将获得主页,但下次您单击它时,您会发现我不希望它向服务器发送另一个请求。你知道我在哪里可以找到这方面的教程吗?只是为了让我正确理解,如果你在主页上(例如)并单击主页链接,你不希望页面刷新,对吗?如果是这样,你有几个选择。一种可能是将该Html.Link包装在“if”语句中,并在同一页面上呈现标签而不是链接。另一种方法是动态添加一个“#”作为URL,而不是真正的URL。我不知道有什么“内置”方法可以做到这一点,但是,您需要使用自己的方法。向actionlink添加一个类,new{@class=“btnCurrent”},然后您可以使用这个jquery是的,这是一个很好的建议。。。基本上,当您单击任何菜单项并重新加载页面时,会向相应的菜单项添加一个类。然后在菜单导航上单击检查它是否属于该类,如果是,则忽略。我认为这不是最好的解决方案,因为它会冗余地进行服务器调用。解决方案应该在客户端而不是服务器端处理。我发表了我对解决方案的看法。