 <p>Thanks to the commenters for teasing out the answer details.</p> <p>MVC's default EditorFor "master" template, Object.ascx, has an if statement in place to prevent this from happening.</p> <p>To change this behavior you need to replace the base /EditorTemplates/Object.ascx template with your own. This is a good replica of the template baked into MVC:</p> <pre><code>&lt;%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %&gt; &lt;% if (Model == null) { %&gt; &lt;%= ViewData.ModelMetadata.NullDisplayText %&gt; &lt;% } else if (ViewData.TemplateInfo.TemplateDepth &gt; 1) { %&gt; &lt;%= ViewData.ModelMetadata.SimpleDisplayText %&gt; &lt;% } else { %&gt; &lt;table cellpadding="0" cellspacing="0" border="0"&gt; &lt;% foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm =&gt; pm.ShowForDisplay &amp;&amp; !ViewData.TemplateInfo.Visited(pm))) { %&gt; &lt;% if (prop.HideSurroundingHtml) { %&gt; &lt;%= Html.Display(prop.PropertyName) %&gt; &lt;% } else { %&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="display-label" style="text-align: right;"&gt; &lt;%= prop.GetDisplayName() %&gt; &lt;/div&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="display-field"&gt; &lt;%= Html.Display(prop.PropertyName) %&gt; &lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;% } %&gt; &lt;% } %&gt; &lt;/table&gt; &lt;% } %&gt; </code></pre> <p>This line:</p> <pre><code>&lt;% } else if (ViewData.TemplateInfo.TemplateDepth &gt; 1) { %&gt; </code></pre> <p>tell the template to only go down a single level of your object graph. Simply replace the 1 with 2 or remove it entirely to change how far MVC will drill down.</p> <p>More details about this template can be found here: <a href="http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html" rel="nofollow noreferrer">http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html</a></p> <p>( man, I should create a macro to linking to Brad Wilson's stuff, I do it all the time ) ;)</p>