У меня есть модель, в которой в качестве свойства используется сложный тип.
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, я попытался выполнить следующие шаги безрезультатно:
- Украсил свойство Position с атрибутом
ScaffoldColumn(true)
. - Создал представление 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>
}
Так что вопросы:
- Имеет поведение по умолчаниюизменилось или я что-то упустил?
- Есть ли лучший способ включить видимость сложных типов?
- Можно ли получить доступ к шаблонам по умолчанию в ASP.NET MVC3?
Rich