レストランで注文する食品を表すオブジェクトがあります。このオブジェクトにはモディファイアグループ(サイド、調理手順、ピザのトッピングなど)のリストがあり、各リストにはモディファイアのリストがあります。
特定の修飾子オプションは、同じデータ型であっても、異なる方法で表示する必要があります(たとえば、トッピングは左/右/すべてを指定する必要があります)。
@ Html.EditorForを使用して、必要に応じて代替のEditorTemplateを指定しようとしています。
/ Views / Shared / EditorTemplatesには、ModifierSelection.cshtmlとToppingSelection.cshtmlがあります。私はそれらを次の見方で呼んでいます:
@model MyApp.ViewModels.ModifierSelectionList
<div class="menugroup">
<h3 class="menuname">@Model.ModifierListName: (Select @Model.MaximumSelections)</h3>
<div class="modcountvalidation">@Model.ValidationResults</div>
@Html.HiddenFor(model => Model.ModifierListId)
<table class="menu">
@if (Model.IsToppingsList)
{
@Html.EditorFor(model => Model.ModifierSelections, "ToppingSelection")
}
else
{
@Html.EditorFor(model => Model.ModifierSelections)
}
</table>
</div>
デフォルトの代わりに「ToppingSelection」EditorTemplateを必要とするアイテムを表示しようとすると、次のエラーが発生します。
System.InvalidOperationException was unhandled by user code
Message=The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[MyApp.ViewModels.ModifierSelection]', but this dictionary requires a model item of type 'MyApp.ViewModels.ModifierSelection'.
Source=System.Web.Mvc
つまり、データ型用のEditorTemplatesのセットがあります。それらを使用してアイテムのリストを表示しようとしていますが、使用するアイテムを選択できる必要があります。
私は何が間違っているのですか?
ありがとう!