[Download Source Code]
The ironic thing is: Scott already discussed the reason why that exception will be thrown… indirectly. The LosFormatter is clever enough to know when the view state was tampered with. You might ask - but we never tampered with the view state!? Indirectly, yes we did. If you had to step through the logic of the saving and loading of the view state from the medium (file system), you will quickly find that both of the browser windows that were opened shares the same session ID and page path; therefore, sharing the same view state file (where all the view state is saved to).
Essentially, with Scott's code, the last to write to the view state file is the one which that the view state file will be guaranteed to work in future post backs. With that said, the connection of the tampering has to do with the logic that the last post back may make the legitimism of the pages rendered earlier corrupt (from the latest page request in timeline).
A sharp reader out there might say - but you used the query string for different 'pages' (presentation of different user controls). Surely you can just vary each view state file by query string as well? To be honest, that was only an example that I presented… there are many other pages that do not vary their query string at all but the same page may want to persist two completely different view state values.
It is time for me to crack my knuckles for my solution that follows on the next page.