簡體   English   中英

Donut使用mvcdonutcaching ASP.NET MVC緩存_Layout

[英]Donut caching _Layout with mvcdonutcaching ASP.NET MVC

在我的ASP.NET MVC項目中,我在共享的_Layout.cshtml文件的導航菜單中有一個登錄子菜單,如果用戶已登錄則顯示用戶信息,如果沒有則顯示注冊/登錄選項。 登錄子菜單是我名為_LoginPartial共享文件夾中的部分視圖:

@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
    //display <ul> with user profile settings, omitted for brevity
}
else
{
    //display <ul> to signup/login, omitted for brevity    
}

雖然我大量緩存各種控制器的幾個動作,但我想在_Layout上實現甜甜圈緩存,以便_LoginPartial不會被緩存,原因顯而易見。 我正在使用mvcdonutcaching庫來完成這個(在這個答案中建議),它提供了一些@Html.Action重載,它有一個額外的bool excludeFromParentCache屬性。

因此,我創建了一個帶有UserAuth操作的LayoutController ,該操作返回_LoginPartial

public class LayoutController : Controller
{
    [ChildActionOnly]
    public ActionResult UserAuth()
    {
        return PartialView("_LoginPartial");
    }
} 

..在我的_Layout文件中,我想要_LoginPartial出現,我稱之為mvcdonutcaching Html.Action重載:

@Html.Action("UserAuth", "Layout", true)

為了測試這個,我在FAQControllerIndex操作上設置了一個持續時間很長的OutputCache ,但是如果我按照這些步驟操作:

  • 登錄
  • 導航到/ faq
  • 登出
  • 導航到/ faq

/ faq仍然顯示我已登錄。

我在這里錯過了什么? 這是mvcdonutcaching在實際HTML中的輸出:

<!--Donut#3ED0C02DC8A537BA39C854B0D03E9A954F9FD01409A5E10C6C623D32512359E90086702A97EB36055229506A07D84CC1F6F7D1BF0A230DE5E87423363C24CA8D8C93D671FF398054DA29A7594CE2B8E939195C563004CE281D76DD838DB25198FCCCEC694F80885B86E611E2C5D9DE0C0B9B67432AD021FF581FD4A652C611D62B12C4C3A327E917940F333B56268D530831CCA617AF126AA0F809E5FBF1AB3C4231B11851F0BC73ED1A0B43A81AFF7B9FB081B7DF4B90712965596411627ECABD9DDFD519438910DBFCB94A22C216B1C3ABDBB5FC5E436E838505E6B56698E37CDF09A47CEAB5A3E3269FA326EA9191142954445BC92CE50248A0F7B964764C6E6768A92C31E55AE07AF230ECB7B8E8A5B048A82CD035095D84BDDA6336ED7805BB89CAB8C92AF1E4FA7971DF92CC2C2BC68CF605B594191DD55BDAF4E90D6451EF10FA18140B4201D16071052D5CC2B9490BFA00B2DDC622ED22CA1F8DB75E5F30E830B9D7B13778BC6E63EC49745AC037A4009A4CF05749568BD4D3DB8AE4A1E08024#-->  
<ul class="nav navbar-nav navbar-right">
    <ul class="dropdown-menu" role="menu">
            <li><a href="/manage" class="dropdown" title="Manage your account"><i class="fa fa-user fa-lg"></i> Account</a></li>
            <li class="divider"></li>
            <li><a href="javascript:document.getElementById('logoutForm').submit()" title="Log out"><i class="fa fa-sign-out fa-lg"></i> Log out</a></li>
        </ul>
</ul>
<!--EndDonut-->

更新 :我還嘗試將_LoginPartial的菜單移動到駐留在LayoutController視圖中的部分視圖 - 問題仍然存在。

我遇到了完全相同的事情,但在注意到我無意中使用[OutputCache]而不是[DonutOutputCache]后解決了它!

用戶錯誤。 _Layout精美。 請仔細檢查您是否使用了正確的[DonutOutputCache]屬性。

將您的操作移至AccountMember Controller,避免使用LayoutController

您應該查看官方演示: https//github.com/moonpyk/mvcdonutcaching/tree/master/DevTrends.MvcDonutCaching.Demo

特別是AccountController和視圖......

問候...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM