In an effort to make Web development more accessible on the Microsoft platform, Microsoft introduced Active Server Pages (ASP). The idea behind classic ASP is that a single ISAPI DLL named ASP.DLL interprets files with the extension ASP (for example, MYSITE.asp). ASP files include some HTML and perhaps some script code to be executed on the server. The ASP ISAPI DLL executes the script code as necessary and sends the HTML contained in the ASP file back to the client. The script code usually calls COM objects that do the dirty work (for example, looking up items in a database and tailoring the output based upon its findings) while the look and feel of the page is defined by the HTML in the ASP file.
While ASP opened the doors to a whole host of new programmers by catering to a much more widely used programming language (Visual Basic and VBScript), it wasn't the silver bullet. Among the downsides of classic ASP are:
Mixing of user interface code and programming logic
Performance issues due to IDispatch
Inconsistent means of managing state (session state and application state)
An ad-hoc security model
This isn't an exhaustive list by any means, but it highlights the most important issues with classic ASP. That's why ASP.NET exists.