Отображение сложных типов в ASP.NET MVC3 RC2 - PullRequest
4 голосов
/ 15 декабря 2010

У меня есть модель, в которой в качестве свойства используется сложный тип.

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; }
    }
}

Когда я пришел создать форму бизнес-модели, свойство Position не отображалось.Я уверен, что сложные типы отображались по умолчанию в MVC2.Предполагая, что это может быть переключение в MVC3, я попытался выполнить следующие шаги безрезультатно:

  1. Украсил свойство Position с атрибутом ScaffoldColumn(true).
  2. Создал представление Position.cshtmlin Views \ Shared \ EditorTemplates.

Мой текущий обходной путь - преобразование моего пользовательского Object.ascx из MVC2 в MVC3 Razor Object.cshtml.Я сомневаюсь, что я уверен, что мой пользовательский Object.ascx был основан на оригинале, опубликованном в блоге Брэда Уилсона.

@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?

Rich

1 Ответ

0 голосов
/ 15 декабря 2010

Шаблон Object.ascx по умолчанию отображает только один уровень графа объектов.

Вверху есть строка, которая проверяет, является ли глубина> 1, а затем выдает залог при рендеринге.

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

Изменить на:

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

Или удалите это, если целиком.

...