What Will said is absolutely true, but the devil is in the details. I remember having this issue when I first started--it's most definitely the fact that the compiler cannot 'see' the ascx file because the namespace for either your project, or the code-behind does not match the info in the first line of you ascx file.
For instance:
Let's say you have a view.ascx file with a namespace like this:
Namespace DotNetParts.ModuleName
Partial Class ViewModuleName Inherits Entities.Modules.PortalModuleBase
And you ascx file (1st line) looks like:
Codebehind="ViewModuleName.ascx.vb" Inherits="DotNetParts.ModuleName.ViewModuleName"
I realize this is in vb, but the same rules apply. The above code behind matches the view file name, and the inherits includes the full namespace path to the control.
Now, if the project properties library name does not match 'DotNetParts.ModuleName', you will have an issue. For instance, if your library name is just 'JoeModule', I *think* (it's been a while) that it will try to assemble a namespace path as JoeModule.DotNetParts.ModuleName (I forget which, but you get the point, right?), and it will never find the ascx file.
I won't confuse you by getting into add'l issues you would have in a vb environment, since you're strictly asking about c#. Also make sure the Assembly Name (the name of the dll that is created on compile) matches the Root Namespace. So in the above example, you would have DotNetParts.ModuleName in both the Assembly Name field and the Root Namespace field.
Once of the ways I have found to diagnose these issues is to use intellisense. Find a new line and try to type out the whole path to your class. You can usually discover what VS *thinks* the path is to the class by seeing what intellisense is doing. For instance, in the above example, start with the info in the Root Namespace field. Type that out, and see what is hanging off the end of it...
Hope this helps. I know that can be really frustrating when you're just starting out...