I have asigned a module to pages according to their menu items in the module parameters but I would like to hide/show it on specific pages that don't have a menu item linking to them.
How do I control module display on these pages?
Solution 1 : hidden menu
If your pages also need pretty sef urls, you can make a hidden menu and link those articles in the hidden menu. A hidden menu means that you don't create a module for it, you just create it in the menu manager, so it's never visible as a true menu to the end user.
Since Joomla sees this as a real menu (even though it's not visible), you will be able to assign modules to each one of them by selecting the hidden menu items in the module parameters.
UPDATE: Since Joomla 3.5 you can now choose to hide menu items in a published menu by going to the Link Type tab in the menu item and changing "Display in Menu" to "No".
Solution 2 : advanced module manager
Other than that, Regular Labs (previousl called NoNumber) Advanced Module Manager is absolutely the way to go. Advanced Module manger lets you assign modules based on a large number of criteria such as category, component, url, menu item, language. You can even use it to publish things to specific users or groups of users.
Try using No Number extensions.
The advanced module manager allows you to do a lot of specific assignments, so you could actually set it up to match a menu item only if "abc" is in the url path, or by specific article, or component, even day of the week. You can even write custom php functions to create your own selectors. You can use "any" or "all" matches, it's pretty awesome. All his other extensions are pretty great too, totally worth purchasing Pro, but even the base free stuff is great.
Sorry - I started writing this like 20 minutes ago and got interrupted then posted it without knowing everyone already suggested this!! But I'm leaving it because it makes me feel like I'm part of a team of people who know stuff.
Joomla it self can only use the menuitems to control the visibility of modules.
One thing you can do is to hide the module position in the template something like this:
<?php if (JFactory::getApplication()->input->get('id') == 4711) : ?> <jdoc:include type="modules" name="submenu" /> <?php endif; ?>
This code will display the modules in the "submenu" position if the id parameter is "4711".
You see that this method needs some php knowledge and may not fit your needs.