I have to agree with Sergey Alexandrovich Kryukov
. It depends completely on what you are intending to do, i.e the requirements of your project & task. However, just to help you get the picture, here's my point of view:
2. Code behind is mostly used to control the page's core logic: Should this page be delivered for this user? Should the user be shown the button to erase all memory and force water to turn red...you get the drift: actions/things that affect the system/application as such.
3. And you also do redundant work, like validating, on both client and server end; or maybe concurrent work, like having an AJAX call to fetch data rather than having the data sent with the page (for pagination etc).
Well, I hope that paints a good enough picture!