I discovered this little problem myself. Even though it's been a while, I thought I would post my solution. If you require that a <DIV> container have "height: 100%;," it is necessary to have its parents up the tree all be 100%. The trouble, as noted, is that this hidden "ModuleContent" <DIV> is not sized.
The "ModuleContent" <DIV" tag, with an ID something like "DNN_ctr123_ModuleContent," shares that "ctr123" with its parent, which is the Module Container. You cannot get to the ModuleContent object from code, but you CAN get to the module's container, and get its Client ID. So use the Container's Client ID to "derive" the "ModuleContent" object's Client ID.
In the module's code-behind, its immediate parent object (Me.Parent) is the Container. The Container's Client ID is of the format, "dnn_ctr123_ContentPane." All we want is the "ctr123" from its ID. Split the Client ID by the underscore characters, and take the second item from the resulting array. That is the "ctr123."
In the .ascx of my module, I put in this STYLE block--
<style type="text/css" >
div#<%= ModuleContentDivID() %> {
height: 100%;
}
</style>
Then, in the code-behind--
Protected Function ModuleContentDivID() As String
Dim ctr As String = Me.Parent.ClientID.Split("_")(1)
Return String.Format("dnn_{0}_ModuleContent", ctr)
End Function
This gets the Container's Client ID, strips out the "ctr" block, and plugs it into the string "dnn_<here>_ModuleContent." This is the ModuleContent <DIV>'s Client ID.
Now when you view source on the page, you will have something like this--
<div id="dnn_ctr375_ModuleContent" class="MyModuleContent">
<style type="text/css" >
div#dnn_ctr375_ModuleContent {
height: 100%;
}
</style>
...
</div>
And now the Module's content can expand up to 100% height.