複合型をプロパティとして使用するモデルがあります。
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 のスイッチである可能性があると仮定して、次の手順を試してみましたが、役に立ちませんでした。
- 属性で 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 の既定のテンプレートにアクセスできますか?
リッチ