How not cache an ASP.NET user control?

I’m using OutputCache in my page that has a user control, but I don’t want to cache this specific user control because it’s related to a user login (if I access the page, I see the page as if I were authenticated with another user).

How can I do that?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Personally I use the VaryByCustom attribute to give logged in and logged out users different cached page views:

<%@ OutputCache VaryByCustom="IsLoggedIn" Duration="30" VaryByParam="*" %>

then in global.asax you put

public override string GetVaryByCustomString(HttpContext context,
    string arg)
{
    if (arg == "IsLoggedIn")
    {

        if (context.Request.IsAuthenticated)
        {
            return "Logged in: " + context.User.Identity.Name;
        }
        else
        {
            return "Not Logged In";
        }

    }
    else
    {
        return base.GetVaryByCustomString(context, arg);
    }

}

I am just going to throw this out there. How about the substitution control?

http://msdn.microsoft.com/en-us/library/ms228212.aspx

According to msdn website:

The Substitution control lets you
create areas on the page that can be
updated dynamically and then
integrated into a cached page. …
The Substitution control offers a
simplified solution to partial page
caching for pages where the majority
of the content is cached. You can
output-cache the entire page, and then
use Substitution controls to specify
the parts of the page that are exempt
from caching.

I have never used the substituion control personally, but I just happened to look it up the other day, and it sounded like it can somehow inject updated content into an otherwise cached page output.

Method 2

You can cache a page and you can cache a user control, but you can’t cache a page except for a user control. When the user control runs the entire page has to run. You have to make the output cache for the page recognise the different users.

You can use VaryByHeader="Cookie" to cache the page for each set of cookies if the user identity is stored in a cookie. You can use VaryByCustom="SomeString" and implement a check for SomeString to do your own check for user identity in the GetVaryByCustomString method in Global.asax.

Method 3

You can create a cache filter : http://weblogs.asp.net/rashid/archive/2008/03/28/asp-net-mvc-action-filter-caching-and-compression.aspx

Check inside this filter if the user is logged or not.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x