我有一个带有名称的用户控件uc_Menu.ascx
。menues
是动态加载的Role
。所以,我将它包含在用户控件中并像这样缓存它;
注意:出于测试目的,我只提供了 60 秒的缓存;
<%@ 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
按钮(在母版页上)时清除缓存,因为菜单是角色基础和管理员可能会给用户更多权限。在这种情况下,有必要再次重新设置菜单。那么,如何从用户控件中清除缓存;
注意:我也试过这个,但它不起作用;
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");
}