You are correct in your assumptions.
Your OutputCache directive is telling the output caching mechanism to cache the entire rendered page for a specific URL, for 600 seconds.
In your simple example, you're probably not using any query strings, however, the VaryByParam declaration within the directive allows you to specify a query string parameter that ensures each different value of that parameter is cached separately. For example, if you had:
<%@ OutputCache Duration="600" VaryByParam="ProductID"%>
then these three different URL's would each be cached individually, and changing the value of the "ProductID" parameter to something not yet cached would ensure that the page is processed and rendered by the ASP.NET runtime correctly:
http://www.example.com/viewproduct.aspx?ProductID=123
http://www.example.com/viewproduct.aspx?ProductID=3
http://www.example.com/viewproduct.aspx?ProductID=67
In your example, on your button click, the page has already been previously rendered (and cached) and when you post back again there is no difference in the URL that you are posting back to and effectively reloading, therefore, the ASP.NET runtime will display the cached page to you without going through the process of re-rendering it.
Other than by changing the value of a "VaryByParam" parameter, the OutputCache directive is quite a bit of an "all-or-nothing" approach to page caching. There is a "VaryByContol" attribute to the directive, however, that can only be used in ASP.NET user controls, rather an a complete ASP.NET web page.
From your question, it sounds moer like you need to investigate partial page caching. Either that or a mechanism to invalidate the cache when some event occurs. This is usually done by adding a "cache dependency".
For that, the following links should help:
Caching Portions of an ASP.NET Page
Tip/Trick: Implement "Donut Caching" with the ASP.NET 2.0 Output Cache Substitution Feature
Programmatically Removing a Page from the OutputCache