在ASP.NET MVC3 RC2中显示复杂类型

时间:2010-12-15 10:30:52

标签: asp.net-mvc templates asp.net-mvc-3 razor editorformodel

我有一个使用复杂类型作为属性的模型。

namespace Web.Models {
    public class Business : IModel {
        [Key, HiddenInput(DisplayValue = false)]
        public Guid ID { get; set; }

        public Position Position { get; set; }

        public bool Active { get; set; }

        public ICollection<Comment> Comments { get; set; }

        public Business() {
            ID = Guid.NewGuid();
            Position = new Position();
        }
    }

    public class Position {
        public double Latitude { get; set; }
        public double Longitude { get; set; }
    }
}

当我创建Business模型的一种形式时,未显示Position属性。我确信MVC2中默认显示复杂类型。假设这可能是MVC3中的一个开关,我尝试了以下步骤无济于事:

  1. 使用ScaffoldColumn(true)属性修饰了Position属性。
  2. 在Views \ Shared \ EditorTemplates中创建了Position.cshtml视图。
  3. 我目前的解决方法是将我的自定义Object.ascx从MVC2转换为MVC3 Razor Object.cshtml。我的犹豫是,我很自信我的自定义Object.ascx是基于原版的Brad Wilson博客。

    @if (ViewData.TemplateInfo.TemplateDepth > 1) {
        @ViewData.ModelMetadata.SimpleDisplayText
    }
    else {
        <div class="editor">
            @foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !ViewData.TemplateInfo.Visited(pm))) {
          if (prop.HideSurroundingHtml) {
                @Html.Editor(prop.PropertyName)
          }
          else {
                <div class="field">
                    @(prop.IsRequired ? "*" : "")
                    @Html.Label(prop.PropertyName)
                    @Html.Editor(prop.PropertyName)
                    @Html.ValidationMessage(prop.PropertyName)
                </div>
          }
      }
        </div>
    }
    

    所以问题是:

    1. 默认行为是否已更改或我遗失了什么?
    2. 有没有更好的方法来打开复杂类型的可见性?
    3. 是否可以访问ASP.NET MVC3中的默认模板?

1 个答案:

答案 0 :(得分:0)

默认的Object.ascx模板只显示对象图的一个级别。

顶部有一条线,用于检查深度是否为&gt; 1然后在渲染时保释。

<% } else if (ViewData.TemplateInfo.TemplateDepth > 1) { %>

更改为:

<% } else if (ViewData.TemplateInfo.TemplateDepth > 99) { %> 

如果完全删除它。