必要なのは、エディターテンプレートのモデルタイプを、含まれているモデルのタイプではなく、このエディターが編集するプロパティのタイプの一部にすることです。
EventType
クラスaとaがCreateEventModel
ありEditEventModel
、との両方に次のようなプロパティがあるCreateEventModel
とします。EditEventModel
EventType
public class CreateEventModel
{
//Other stuff here....
public EventType TypeToCreate { get; set; }
}
public class EditEventModel
{
//Other stuff here....
public EventType TypeToEdit { get; set; }
}
EventType.cshtmlという名前のEditorTemplatesフォルダーにパーシャルを作成し、その中に次のようなものを配置します。
@model EventManager.Models.EventType
@{
var types = //put whatever you need here to get the list of available types*;
}
@Html.DropDownListFor(m => m, types)
DropDownListFor()呼び出しの単純なm => m式と、ここに含まれているモデルへの参照がないことに注意してください。@model宣言の型は単にEventTypeです。エディターテンプレートが知っておく必要があるのは、EventTypeタイプのプロパティの編集に使用されることだけです。
次のように、CreateEventModel
およびのビューでこのテンプレートを使用できます。EditEventModel
ビューの作成:
@model EventManager.Models.CreateEventModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@*Other stuff here...*@
@Html.EditorFor(m => m.TypeToCreate)
ビューの編集:
@model EventManager.Models.EditEventModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@*Other stuff here...*@
@Html.EditorFor(m => m.TypeToEdit)
(*これに使用するコード:
EventManager.Models.DropdownEventTypesModel dropdownList = new EventManager.Models.DropdownEventTypesModel();
List<SelectListItem> types = dropdownList.EventTypes;
実際にはビューに属していませんが、それは別の問題です。)