나는 사용자 이름이 uc_Menu.ascx
인 컨트롤이 있습니다. menues
은 동적으로 Role
기본으로로드됩니다. 그래서, 나는 그것을 사용자 콘트롤에 inlude하고 이렇게 캐시했다.
참고 : 테스트 목적으로 나는 단지 60 초 캐시를 제공합니다.Asp.Net의 사용자 정의 컨트롤에서 출력 캐시 지우기
<%@ OutputCache Duration="60" VaryByParam="none" %>
<td id="Menu">
<div id="firstpane" runat="server" class="menu_list">
<p class="menu_head">
<a href="/forms/Dashboard.aspx">
<span style="background: url('/App_Themes/Default/Images/icons/ic_grid.png') no-repeat"></span>
DashBoard
</a>
</p>
</div>
</td>
코드 숨김 코드는 다음과 같습니다.
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BulitMenus();
Response.Write("<h1>" + DateTime.Now.ToString() + "</h1>");
}
}
위의 사용자 컨트롤을 참조한 나의 마스터 페이지. 내가이 시험 때
<%@ Register Src="~/UserControls/uc_Menu.ascx" TagPrefix="Ken" TagName="Menu" %>
<Ken:Menu runat="server" id="Menus" />
자, 잘 작동
는 그러나, 나는 때 LogOff
사용자가 버튼을 클릭 (에 캐시를 지우려면 (페이지가 처음로드 될 때, 캐시 일) 마스터 페이지) 메뉴가 역할 기반이고 관리자가 사용자에게 더 많은 권한을 부여 할 수 있기 때문입니다. 이 경우 메뉴를 다시 relode해야합니다. 그래서 사용자 정의 컨트롤에서 캐시를 지우려면 어떻게해야합니까?
참고 : 나는 또한 이것을 시도했지만 작동하지 않습니다. http://aspalliance.com/668_Remove_ASPNET_Page_Output_Cache_Entries
및
protected void Lbtn_LogOff_Click(object sender, EventArgs e)
{
HttpResponse.RemoveOutputCacheItem("/UserControls/uc_Menu.ascx");
// this code is copied from a url above which i have included i my question
HttpContext.Current.Cache.Insert("Pages", DateTime.Now, null,
System.DateTime.MaxValue, System.TimeSpan.Zero,
System.Web.Caching.CacheItemPriority.NotRemovable, null);
FormsAuthentication.SignOut();
Response.Redirect("~/authorization/Login.aspx");
}
특히 VaryByParam = "none"인 경우 역할 기반 컨트롤에 출력 캐시를 사용하는 것은 좋지 않습니다. 귀하의 경우, 관리자를 위해 메뉴가 캐시되면 동일한 방법으로 사용자에게 표시됩니다. 예 : http://stackoverflow.com/questions/290098/asp-net-mvc-caching-vary-by-authentication 또는 http://stackoverflow.com/questions/2109928/how-to-turn-output-caching- off-for-authenticated-users-in-asp-net-mvc 등 – Lanorkin