2015-01-01 8 views
3

Я пытаюсь кэшировать страницу без навигационной панели страницы. Когда я кечу страницы, все работает нормально, но я получаю нежелательное поведение.Страница кэша без навигатора. Система входа/выхода пользователя не обновляется вообще (MVC)

Объяснение:

Когда я кэшировать страницы для индекса, например, Navbar также кэшируются, так что если пользователь нажал кнопку входа в систему и входа в систему, пользователь перенаправлять на той же странице (Index) и вход в систему не влияет (имя пользователя и кнопка выхода из системы не отображаются), кнопки входа и регистрации все еще отображаются, это проблема.

Это мой код:

Главная Контроллер:

public class HomeController : Controller 
{ 
    [OutputCache(Duration=(60*60))] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
    // ... 
} 

Могу ли я Варах что-то, чтобы предотвратить это?

+2

Использование решения Donut-Caching, например https://github.com/moonpyk/mvcdonutcaching – haim770

+0

@ haim770 спасибо за помощь, но мне не нужно кэшировать частичный вид из моего представления, а не html.action. Есть ли какое-либо обходное решение? – Ron

+1

Вы должны каким-то образом исключить навигационную панель из процесса кэширования. Другой подход, который вы можете попробовать, - написать Javascript (на стороне клиента), чтобы показать/скрыть соответствующие части на основе текущего состояния аутентификации пользователя. – haim770

ответ

0

Мне удалось найти решение, используя «haim770».

Решение с помощью "пончика" Caching (https://github.com/moonpyk/mvcdonutcaching)

1.First я получаю «пончик Caching из пакетов NuGet.

2.I переключился на странице _layout.cshtml линии : @Html.Partial("_LoginPartial") с @Html.Action("partialView", true)

3.Than я строю действий внутри контроллера счета под названием «PartialView», который возвращает вид, что я хотел, как это:

public ActionResult partialView() 
    { 
     return PartialView("_LoginPartial"); 
    } 

4.После это я украсил действий, которые возвращают индексную страницу с

[DonutOutputCache (Длительность = (60 * 60))]

так:

[DonutOutputCache(Duration=(60*60))] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

И вы сделали, Еще раз спасибо Хаиму (Хаим).

+0

Спасибо, но я вижу, что производительность намного меньше, чем исходный атрибут кеша вывода –