我有一个使用复杂类型作为属性的模型。
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)
属性。
- 在 Views\Shared\EditorTemplates 中创建了一个 Position.cshtml 视图。
我当前的解决方法是将自定义 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>
}
所以问题是:
- 默认行为是否已更改或者我错过了什么?
- 有没有更好的方法来打开复杂类型的可见性?
- 是否可以访问 ASP.NET MVC3 中的默认模板?
Rich
默认的 Object.ascx 模板将仅显示对象图的一层。
顶部有一行检查深度是否 > 1,然后停止渲染。
<% } else if (ViewData.TemplateInfo.TemplateDepth > 1) { %>
改成:
<% } else if (ViewData.TemplateInfo.TemplateDepth > 99) { %>
或者完全删除它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)