2013-10-06 6 views
0

Я новичок в asp.net MVC4.предотвращение обновления при нажатии на текущую страницу

Я реализую панель навигации на своем веб-сайте.

Я бы хотел предотвратить обновление при нажатии текущей страницы на панели навигации.

UPDATE Я использую бритву для панели навигации:

<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> 

Как я могу выполнить это?

+0

Сообщите нам, пожалуйста, код. –

+0

Это общий вопрос, мне нужно реализовать эту функцию: Если у вас есть Главная и О нас в навигации, и вы нажимаете «Домой», вы получите домашнюю страницу, но в следующий раз, когда вы нажмете на нее, и вы не наденете, t хочет, чтобы он отправил другой запрос на сервер. Знаете ли вы, где я могу найти учебники для такой вещи? –

+0

Именно поэтому я правильно понимаю, если вы находитесь на домашней странице (например) и нажимаете ссылку на главную страницу, вы не хотите, чтобы страница обновлялась, не так ли? Если это так, у вас есть несколько вариантов. Можно было бы обернуть этот Html.Link в оператор «if» и визуализировать метку вместо ссылки, если на той же странице. Другой динамически добавляет «#» в качестве URL вместо реального URL. Я не знаю о «встроенном» способе сделать это, однако вам нужно перевернуть свой собственный метод. –

ответ

1

В данном решения Страница будет обновляться, но уменьшит запрос на сервер и не будет вызывать действие снова и снова.

В MVC4 один из лучших, как вы можете достичь этой цели с помощью кэширования

[OutputCache(Duration=30)] 
public ActionResult FEATURE_1_URL(){} 

так, указав время он будет хранить ваш результат кэширования поэтому при нажатии кнопки в следующий раз ActionLink это даст вам результат от Кэширование данных по продолжительности времени, и это уменьшит запрос к серверу.

Это может быть полезно, по крайней мере, для быстрого ответа

+0

Я не думаю, что это лучшее решение, поскольку оно избыточно делает вызов сервера. Решение для этого должно выполняться на стороне клиента, а не на стороне сервера. Я высказал свою точку зрения на решение. – eaglei22

1

использование JQuery

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

Я обновил свой вопрос, я использую Razor –

+1

добавьте класс к вашему actionlink add, new {@class = "btnCurrent"}, тогда вы можете использовать этот jquery на нем –

+0

Да, это хорошее предложение ... В основном, когда вы нажмите на любой пункт меню и перезагрузите страницу, добавьте класс в соответствующий пункт меню. и в меню навигация нажмите, если он принадлежит этому классу, если он игнорирует. – PSL

0

В принципе, то, что я сделал, было создать @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> 
} 
} 

Ясно, что не все это будет применяться к каждому сценарию, но это может быть использовано в качестве ссылки. Важной частью является просто знание текущего активного пункта меню и установка его href = "#", однако вам нужно это сделать.

Смежные вопросы