1). Stick strictly with the standard ASP.Net controls and avoid writing any client side javascript. But you quickly run into the limitations of the standard controls.
2). Jettison the ASP.Net event model, and just do everything in Page_Load.
3). Write your own custom controls. This, at first, sounds like an attractive alternative, until you realize that there are all sorts of subtleties involved. And MS will likely break whatever you write in future upgrades.