There are actually a plethora of ways you *could* go about this. I'll list a few of them:
1. ASCX files (separate "controls" -- this is the standard way): create more ASCX files in your project and inherit them from PortalModuleBase, then add them as a control in your module definition (either through the host-->Module Definitions section, open the module and click "Add Control", or in the module.dnn file (where module is the name of the module) you can add it as a control there as well -- to deploy this to other servers will require it to be in there). Sample for the module.dnn and a different "View" control or mode: (this would be under the <modules><module><controls> section)
<control><key>AlternateView</key><title>Alternate View Mode</title><src>DesktopModules/SomeModule/AlternateView.ascx</src><type>View</type></control>
And then you could add it as a module action like this (in the IActionable interface -- ModuleActions property):
actions.Add(this.GetNextActionID(), "Alternate View Mode", ModuleActionType.EditContent, "", "", this.EditUrl("AlternateView"), false, SecurityAccessLevel.View, true, false);
Alternatively, you could redirect to it from code like this (from within the base module control):
Response.Redirect(this.EditUrl("AlternateView"), true);
2. Dynamically loaded controls: this can be done through dynamically loaded ASCX controls, or just using a MultiView control and loading the view as needed. Either one of these have their implications such as dynamically loaded controls can lose viewstate and working in designtime with multiview can get cumbersome if you have a lot of components
3. ASPX Pages: you *could* include separate ASPX pages in your module and have them handle things -- I do this usually as separate handlers or for popup boxes but not for "core" module functionality. Just be sure you use "ModulePath" + "somefile.aspx" to access it via a link.