I asked myself that question once when I was developing web controls. To try to resolve it I decompile a library of telerik and then I saw how they implement web controls. They develop many components and use the second approximation.
In my opinion is the best option because if the control is complex your code becomes a lot of string.format or something like that and can be difficult to understand and modify. Of course the second option may also be unclear but with very few utility methods you can create highly maintainable controls.