私は次のようなビューモデルを持っています:
public class AttributeEditorViewModel
{
public long AttributeId { get; set; }
public string DisplayName { get; set; }
public object Value { get; set; }
}
モデルはモデル ビルダーを使用して構築されるため、最終的なビュー モデルには上記のオブジェクトのリストが含まれます。
public class AttributeListViewModel
{
public List<AttributeEditorViewModel> Attributes { get; set; }
}
私のモデル ビルダーは、AttributeEditorViewModel オブジェクトのリストをコンパイルし、適切なプリミティブ型を Value プロパティに設定します。データ型は、属性の個別の定義から取得されます。
これで、Razor ビュー (edit.cshtml としましょう) は次のようになります。
@model AttributeListViewModel
@Html.EditorFor(m => m.Attributes)
およびエディター テンプレート Views/Shared/EditorTemplates/AttributeEditorViewModel.cshtml:
@model AttributeEditorViewModel
<div>
<label>@Model.DisplayName</label>
@Html.EditorFor(m => m.Value)
@Html.ValidationMessageFor(m => m.Value)
</div>
私が期待すること。AttributeEditorViewModel の Value プロパティを double に設定すると、次のようになります。
public ActionResult Edit()
{
return View(new AttributeListViewModel
{
Attributes = new List<AttributeEditorViewModel>
{
new AttributeEditorViewModel { DisplayName = "Double example", Value = (double) 0 }
}
};
}
テキストボックスがレンダリングされると思います。代わりに、何もレンダリングしません。別のエディター テンプレート Views/Shared/EditorTemplates/Double.cshtml を追加しました。
@model double
@Html.TextBoxFor(m => m)
これにより、差し迫った問題が解決されました。だから今、値0のテキストボックスを取得します。ただし、カスタム エディター テンプレート内であっても EditorFor を使用すると、何もレンダリングされません。
オブジェクトを基本型として使用するのは根本的に間違っていますか? EditorFor または EditorForModel を使用すると何もレンダリングされないのはなぜですか?
任意の洞察をいただければ幸いです。