The reason is quite simply it is bad practice.

When you call the click event directly, you don't actually know the value of sender and e, these are normally created for you, when the click event is invoked. However, in calling it directly, you either need to create these properties, which you can't really do, or set them equal to null.

In Windows Form world, there is the PerformClick method on a button, which can be used to perform the action of clicking the button, but this does not exist in the world of ASP.Net.

Gary