Suggestions for simple .NET distributed caching solution

We have one server running Windows Server 2003 for our production web server. Our web site has different modules to it and each is ran within it’s own application pool. This makes caching a bit of a problem since each module has it’s own cache and often times multiple modules cache the same items. The problem is when an item in the cache is altered in one module, another module caching the same item cannot easily be refreshed.

Should I always call Page.IsValid?

I know to never trust user input, since undesirable input could be compromise the application’s integrity in some way, be it accidental or intentional; however, is there a case for calling Page.IsValid even when no validation controls are on the page (again, I know its bad practice to be trusting user input by omitting validation)? Does Page.IsValid perform any other kinds of validation? I looked at MSDN, and the docs seem to suggest that Page.IsValid is only effective if there are validation controls on the page, or the Page.Validate method has been called. A friend of mine suggested that I always check Page.IsValid in the button click handlers every time even if there are no validation controls or explicit Page.Validate calls.